2009-05-30
else if
ifのインデント関係は微妙だ。
以下はコンパイルが通るが、
a :: Maybe Int a = if True then return 3 else if False then return 6 else return 4
以下はエラーになる。
a :: Maybe Int a = do if True then return 3 else if False then return 6 else return 4
でもこれは通る。
a :: Maybe Int a = do if True then return 3 else if False then return 6 else return 4
一貫性を重視するとこう。
a :: Maybe Int a = do if True then return 3 else if False then return 6 else return 4
こういう場合case文で書くというイディオムがあるらしい。
a :: Maybe Int a = do case () of _ | True -> return 3 | False -> return 6 | otherwise -> return 4
condに似たものを感じる。
(このcaseによる書き方を紹介しようと思って書き始めたが、インデントの深さでいうと3つ目のほうがいい気がしてきた)
コメントを書く
トラックバック - http://haskell.g.hatena.ne.jp/illillli/20090530