haskell 一行で関数定義

ghci使う上で1行で関数定義したいことが多い。
パターンマッチを一行で行うのにちょっとなやんだ。
まさかセミコロンで二回宣言するとは…って複数行でもそうだもの…

if

単なる条件分岐だけどついこっちで書いちゃいそうになる。

*Main> let f x = if x==0 then "OK" else "NG" in f 0
"OK"

ガード

普通通り | で区切っていけばいい。

*Main> let f x | x==0 = "OK" | otherwise = "NG" in f 0
"OK"

パターンマッチ

まさかなぁ。こんな落ちだとは相当悩んだよ。

*Main> let f 0 = "OK" ; f x = "NG" in f 1
"NG"
*Main> let f 0 = "OK" ; f _ = "NG" in f 1
"NG"

一行の可読性としてはもしかしてifがもっともいいのかな?