モジュール
うまくいかない。これで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には
モジュール名とファイル名とは正式には結びつきません。また、ふたつ以上のモジュールを一つのファイルに含むことができます。(ひとつのモジュールを複数のファイルに分ることもできます。)
って書いてあるのに…。