読者です 読者をやめる 読者になる 読者になる

-fno-warn-unused-do-bind

Haskellコンパイルするとき (ghci) にはいつも -Wall オプションをつけるようにしている。でもそれがかえって邪魔になる場合がある。例えばどんなときかというと、以下のようなコードの場合。

parseFloat :: Parser LispVal
parseFloat = do
    num1 <- many1 digit
    char '.'          // ここで警告が出力される
    num2 <- many1 digit
    return . Float . dig2float $ num1 ++ "." ++ num2

コンパイルすると、次のようなメッセージが表示される。

Warning: A do-notation statement discarded a result of type Char.
         Suppress this warning by saying "_ <- char '.'",
         or by using the flag -fno-warn-unused-do-bind

この警告はさすがにうるさい。 返り値を利用しない場合でも、明示的に _ <- char '.' とせよと。 _ <- と書かないことが明示的に返り値は使用しない、ということを表してるんだと思うけど。

とりあえず警告のメッセージに出ている -fno-warn-unused-do-bind を ~/.ghci に追加して、このメッセージが出ないようにした。

現在の ~/.ghci の中身はこんな感じ。

:set -Wall
:set -fno-warn-type-defaults
:set -fno-warn-unused-do-bind
:set editor vim
:def hoogle \x -> return $ ":!hoogle \"" ++ x ++ "\""