12

haskell で作業して、奇妙な動作を見つけ、それを必要最低限​​の骨まで取り除きました

この作品

a :: Bool
a = case True of
    True -> True
    False -> False

でもやってみると

b :: IO Bool
b = do
    let b' = case True of
        True -> True
        False -> False
    return b'

私は得る

ghci>:l test.hs
[1 of 1] Compiling Main             ( test.hs, interpreted )

test.hs:16:14: parse error on input ‘->’
Failed, modules loaded: none.

だから私は試します

c :: IO Bool
c = do
    let c' = case True of
            True -> True
            False -> False
    return c'

そして、これは機能します。

何?なんで?この場合、なぜ追加のインデントが必要なのですか? おそらく、これらのキーワードは非常に短く、日常の言葉で一般的であるため、これについては何も見つかりません。この動作を説明する仕様はありますか?

4

2 に答える 2

9
于 2015-10-08T00:15:39.407 に答える