Macのghcは改行コードがCRだと動かない
Haskellでどう見ても文法的に間違っていないのに、
何故かコンパイルエラーになっていましたが、
改行コードが原因でした。
ちょうど始めたばかりで、実は文法ミスや、
バージョン違いとの切り分けが大変でしたが、
結果は残念な結果になりました…
まとめ
- GHCではLF、CRLFは正しく動くがCRはダメ
- PDFからサンプルコードをコピペしたらCRになっていた
- Macのプレビューでいくつか試したが、現状全てCRになる
- PDFが原因か、Preview.appがそういう仕様なのかは用検証
調査方法
以下のファイルを改行コードLFで保存します。
lf.hs
plus :: Integer -> Integer -> Integer
plus a b = a + b
main = print (plus 40 2)
LFのまま実行します
file lf.hs
# lf.hs: ASCII text
runghc lf.hs
# 42
CRLFに変換して実行します
nkf -Lw lf.hs > crlf.hs
file crlf.hs
# crlf.hs: ASCII text, with CRLF line terminators
runghc crlf.hs
42
CRに変換して実行します
nkf -Lm lf.hs > cr.hs
file cr.hs
# cr.hs: ASCII text, with CR line terminators
runghc cr.hs
# cr.hs:1:62: parse error on input ‘=’
失敗しますね(´・_・`)
何故CRが紛れ込んだか
最近のmacは改行コードがLFですし、CRが混入するのは中々ありません。
今回は、ちょうどサンプルに使っているPDFからコードをコピペしたところ、
改行コードがCRになっていたのが原因でした。
いくつかのPDFでやってみましたが、全てCRになっており、
Preview.appで必ずCRにされるのか、PDF自体がCRなのかは切り分けが必要です。