Haskell 、そんなに使い込んでるわけではないので、結構、忘れる。授業だと、One lineer が便利なんだけど、
Haskell は indent 構文が普通
ってあたりで、あららになるわけなんですけどね。特に、data だな。
Agda だと直積と排他的和は record と data で別構文なんですが、Haskell は data 一つですませてます。和のケース一つを常に付けて置くような感じか。
これが忘れるんだよな。直積は、
data Product a b = P a b
なんだけど、これだと accessor がないので、ちょっと困る。Curry Howared 対応的に。intro と elim は常に両方あるべきだろと思うんだけど。accessor をつける構文がなかなか思い出せない。
data Product a b = P { x :: a , y :: b }
ここに Comma ですか。Semi Colon ではないのか。Agda の record の構文とずいぶん違う。いろいろ歴史があるんでしょうね。
和の方は、
data Sum a b = L a | R b
これで、L か R かどっちかな構造体になります。こっちは縦棒。まぁ、選択に縦棒は普通なので、こっちの方が思い出しやすい。和の方は必ず case または pattern match を使うので、accessor は必要ない。まぁ、積の方も pattern match 使えば accessor は要らんのだが。
のだが、case の構文の方が忘れやすい。
:t ( \x -> case x of R y -> y ; L z -> z )
で、Sum t t -> t になるんですが、ここで Semi Colon ? いや、ここは縦棒であるべきだろ? まぁ、この Semi Colon は case の構文の一部ではないのだけど。なので、indent 使って書けば出てこないものです。
便利なので Java とか C とかでも欲しいとは思うんですけどね。
No comments:
Post a Comment