はじめに

最近Haskellの勉強を始めたのですが、早速つまずいたことがあったので書いておきます。

Contents

参考書籍

今回の記事を書くにあたって、Haskellの勉強に使用している書籍は、「ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門」です。

do式

do式は、複数の式をまとめる役割があるそうです。そして、do式によってまとめられた式は、上から順に実行されていくとのことです。

参考書籍ではじめにdo式が出てきた例がこちらです。

main = do cs <- getContents
          putStr cs

ファイル名を指定するとファイルの中身を標準出力に出力するというものですが、このはじめのdo式で早速つまずきました。。

つまずいた点と対処方法

参考書籍によると、do式のような複数の式をまとめる構文では、do式内の式のインデントを揃える必要があるとのことでした。(上記の例だと、doの後のcsとその下のputStrが揃っている)

しかし、上記のように書いてコンパイルしようとすると、

The last statement in a 'do' block must be an expression
      cs <- getContents putStr cs

と怒られてしまいました。。どうやらインデントが揃っていないことになっているようです。

そこで、対処方法として、以下のように変えます。

main = do
    cs <- getContents
    putStr cs

doの後に行を変えて、それ以降にインデントを揃えて式を記述するという形ですね。これでばっちり読み込んでくれました!

インデントを揃えるということを考えると簡単な対応だったのですが、どうしても真似から入っていくので、書籍通りの記述でうまくいかず悩んでしまいました。