■ [Haskell] Type Families Data Familiesは、型パラメータに依って実装を変えたいときに使えます。C++のテンプレートでの特殊化みたいなものでしょうか*1。 {-# LANGUAGE TypeFamilies #-} import qualified Data.Sequence as Seq data family Vector a -- BoolのVectorはリストで表現 data instance Vector Bool = BoolVector [Bool] -- IntのVectorはSeqで表現 data instance Vector Int = IntVector (Seq.Seq Int) -- 関数はクラスにする必要があります class VectorElem a where add :: a -> Vector a -> Vector