モジュール

うまくいかない。これでimport Aとimport Bを切り替えることで挙動が変わります、ってのをやりたかったんだけど「module B where」の冒頭でパーサーエラーだ。

module A where
  newtype Foo = MakeFoo {foo :: Integer}
  newtype Bar = MakeBar {bar :: String}
  foo2bar :: Foo -> Bar
  foo2bar (MakeFoo x) = MakeBar ("A" ++ (show x))

module B where
  newtype Foo = MakeFoo {foo :: Integer}
  newtype Bar = MakeBar {bar :: (String, String)}
  foo2bar :: Foo -> Bar
  foo2bar (MakeFoo x) = MakeBar ("B", (show x))

module Main where
import A 
main = print $ foo2bar $ (MakeFoo 42)


id:nyaxt 1 moduleごとにファイル分割するとうまくいったりしませんか?

module A, BをA.hs, B.hsに切り分けるとimport Aでインポートでき、期待通りにimportの変更で挙動を変えるのができるようになりました。A Gentle Introduction to Haskell: Modulesには

モジュール名とファイル名とは正式には結びつきません。また、ふたつ以上のモジュールを一つのファイルに含むことができます。(ひとつのモジュールを複数のファイルに分ることもできます。)

って書いてあるのに…。