モジュール

10.3 インポート

qualifiedやasを使ってみる。

さて最後にqualifiedやasを使って、昨日exportしたものを使ってみます。
こんな感じ。

  • FileUtils.hs
{--
  ファイル操作用モジュール(実際には違うけど…)
--}
module FileUtils (SomeType(ConsA, ConsB), AnotherType(AnotherA, AnotherB)) where

data SomeType = ConsA String | ConsB Int | ConsC Double deriving Show
data AnotherType = AnotherA String | AnotherB Int | AnotherC Double deriving Show
  • import_test.hs
import qualified FileUtils as FU -- hiding (SomeType(ConsB))

main = do print some
          print another

some :: FU.SomeType
some = FU.ConsA "SomeType created by ConsA"

another :: FU.AnotherType
another = FU.AnotherB 10
% ghc -c -W FileUtils.hs                          

FileUtils.hs:6:43:
    Warning: Defined but not used: data constructor `ConsC'

FileUtils.hs:7:52:
    Warning: Defined but not used: data constructor `AnotherC'
% ghc -W -o import_test import_test.hs FileUtils.o


未使用なデータコンストラクタがあるのでちょっと注意されますが、
まぁ気にせず(汗)。
いい感じですが、ちょっとハマりました。
モジュールを作る場合、ファイル名はモジュール名と同じじゃないといけないっぽいですね。
ここを参考にしました。


あと、hiding指定でデータコンストラクタだけをhidingするのは出来なさそうですね。

10.4 本章のまとめ


では、明日からは難関、モナドに進みます。