Representable型クラス
hsの関連module, package
似たようなのがいくつかあるmrsekut.icon
Naperian
naperian
定義
code:hs
class Functor f => Representable f where
type Rep f :: *
index :: f a -> Rep f -> a
tabulate :: (Rep f -> a) -> f a
tabulateの代わりにpositionsを定義しても同じ
index, tabulate, positionsの意味
あるいはどういう気持ち、動機でこれのinstanceにすることが想起される?
この辺は具体的なinstanceの使用例を見るのが良さそうmrsekut.icon
e.g. Stream aは、(Integer -> a)と自然同型になる
つまり、Stream aの全要素と一対一対応するような関数(Integer -> a)が存在することがわかる
Representableのインスタンス
(->) r
Identity
Diag
対角関手
Vector n a
Stream a
(Integer -> a)と自然同型になる
Product
Compose
後半
表現不可能なものの例
Either
Maybe
List
のような値が空のケースがあるもの
双対
Lensにもあるのか
参考