Mochi で使える便利なツールと Python ライブラリ

sloc

flosse/sloc · GitHub

slocソースコード行数をカウントするツールです。多数の言語に対応しており、githubリポジトリ上の最新バージョンでは Mochi にも対応しています。 現在のgithubリポジトリ上の最新バージョンの対応言語は下記の通りです。

mochi-kernel

Carreau/mochi-kernel · GitHub

mochi-kernelIPythonMochi を使うための IPython Kernel です。 他の言語で同様のものに、IHaskellIScala などがあります。

typeannotations

ceronman/typeannotations · GitHub

typeannotationsPython の型に関する便利関数を提供する小さなライブラリです。

このライブラリが提供する型を作る関数と Mochi のタイプパターンマッチングを組み合わせると、パターンマッチングの表現力が増します。

下記は union の使用例です。

from annotation.typed import union

int_or_bool = union(int, bool)

match [100, "aiueo"]:
    [float first, str second]: str(first) + ":float"
    [int_or_bool first, str second]: str(first) + ":int_or_bool"
    _: "other"

# => 100:int_or_bool

options を使うと下記のようなことができます。

from annotation.typed import options

FileMode = options('r', 'w', 'a', 'r+', 'w+', 'a+')

def open_file:
    str path, FileMode mode: 
        open(path, mode)
    str path:
        open(path, 'r')

predicate を使うと下記のようなことができます。

from annotation.typed import predicate

Positive = predicate(-> $1 > 0)
Even = predicate(-> $1 % 2 == 0)
EvenAndPositive = Even and Positive

match 10:
    EvenAndPositive n: str(n) + ':Even and Positive'
    Even n: str(n) + ':Even'
    Positive n: str(n) + ':Positive'

# => 10:Even and Positive

match -10:
    EvenAndPositive n: str(n) + ':Even and Positive'
    Even n: str(n) + ':Even'
    Positive n: str(n) + ':Positive'

# => -10:Even

match 9:
    EvenAndPositive n: str(n) + ':Even and Positive'
    Even n: str(n) + ':Even'
    Positive n: str(n) + ':Positive'

# => 9:Positive

型を作る関数としては、 union と opitons 、predicate の他に optional や only もあります。