Tuesday 15 May 2018

Haskell の構文

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: