■ [Haskell] Type Familiesを使って型レベルで階乗を実装してみる Type Familiesを使って型レベルで階乗を実装してみます。基本の考え方としては、dataで定義する型が型レベルの値で、type familyで定義する型属が型レベルの関数になります。 まずは、数の定義から。EmptyDataDecls拡張を使います。 {-# LANGUAGE TypeFamilies, EmptyDataDecls, UndecidableInstances, ScopedTypeVariables #-} data Zero data Succ a 後で楽なようにいくつかの数も定義しておきます。 type One = Succ Zero type Two = Succ One type Three = Succ Two type Four = Succ Three type