fmapできない型
ProtocolBuffer
のパッケージ内にUtf8
という型があります。
https://hackage.haskell.org/package/protoc…
これは、StringBuffer
で表現されたデータが有効なUtf8
であることを示した目印をつけたものです。
この、目印がつけられたデータに対して処理を考えた時に、
1. 目印を剥がして、 2. 処理をして、 3. また目印をつける
というのは面倒です。
fmap
はコンテナの内部に直接働きかけることができます。しかし、単に目印をつけた型の場合はfmapが定義できません。
カインドを確認すると
> :k Maybe Maybe :: * -> * > :k PB.Utf8 PB.Utf8 :: * >
です。
なので、Utf8
をFunctor
にしようとするとコンパイルエラーとなります。
> instance Functor PB.Utf8 where fmap = undefined <interactive>:297:18: error: • Expected kind ‘* -> *’, but ‘PB.Utf8’ has kind ‘*’ • In the first argument of ‘Functor’, namely ‘PB.Utf8’ In the instance declaration for ‘Functor PB.Utf8’ >
目印を剥がして、付け直す仕組みはどうすればいいのか??
作業ログ
HaskellでHeteroなListを構築する
Hetero
リストをfoldr
でつくる
下記の実装のようにforlr
でリストを作ることができるが、同様なことをHetero
なリストを作りたい。
http://hackage.haskell.org/package/base-4.5.0.0/docs/src/Data-Foldable.html#toList
作業ログ
haddockのインクリメンタルサーチ
ちょっと作ってみた。そもそもなんで付いていないんだろうか。