Hatena::Grouphaskell

[ pred x | x <- "Ibtlfmm!ojllj" ] RSSフィード

2009-05-30

else if

22:37

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