この記事に書いてあることは役にたたないと思うので、あまり気合を入れて読まないでください。
Injective
Scalazには、Injectively, Injective1 ~ Injective5が定義されている。
よくわからない。
Injectiveをググってみると、どうやら単射のことっぽい。
Injectiveは型パラメータをとる型を型引数にとる。
つまり、種(カインド)が* -> *や、* -> * -> *である型が単射であるいう制約をつけるものではないかと考えた。
とりあえずInjectiveの例を列挙してみる。
List
ふつうに定義できる。
type member
Hoge#Fは未定義なので、インスタンスの供給は出来ない。
dependent method types
明示的にインスタンスを渡す必要はあるが、コンパイルすることは可能。
ふむ、よくわからない。
単射にならない型がもしあるのだとしたら、F[_]に対して、ある型Aを渡した時にコンパイルが通らないということだろうか。
ということは、F[_]がとりうる型に対して制約をかければよいということだろう。
次のような例を書いた。
なるほど。
確かに、単射ではないからInjectiveのインスタンスが定義出来ない。
Injectiveの意味がようやく理解できた。
InjectiveはLiskovのコードで使われているが、まあ、よくわからない。
わからなくても、この先困るということもないと思う。
0 件のコメント:
コメントを投稿