Haskellの文法はかなり心地よいが、もちろん嫌な点もある。その代表例が、do の中の if 式である。
if は一つの式を成す必要があるので、以下のように行を下げないといけない。
deleteFile :: FilePath -> IO () deleteFile file = do exist <- doesFileExist file if exist then removeFile file else return ()
以下のように書きたいけれど、Haskell 98 としては誤りである。
deleteFile :: FilePath -> IO () deleteFile file = do exist <- doesFileExist file if exist then removeFile file else return ()
Haskell 2010 では、if 式を三つの式から校正されるよう変更することで、上記のように書けるようにした。Haskell 98 であっても、DoAndIfThenElse拡張を使えば、この形式が利用できる。
しかし、実際に使ってみると、以下のような問題がある。
- DoAndIfThenElse に対応していない GHC 6 がまだ使われいる
- hlint が新しい if 式に対応していない
そこで、当面僕は do の中の if 式を以下のように書くことにした。
deleteFile :: FilePath -> IO () deleteFile file = do exist <- doesFileExist file if exist then removeFile file else return ()
つまり、else の前に 2 つ空白文字を入れる。if は一つの式になり、見た目もあまり損ねない。