ふつける:10章読んだ

読みました.比較的短めで,速攻終わった.内容は,モジュールのインポートとエクスポート.練習問題は無し.テクニック的に重要そうなのをかいつまんでまとめます.

モジュールでのデータコンストラク

モジュールをインポート,エクスポートする上で,データコンストラクタのみをインポート及びエクスポートする事は出来ない.どうするか?例えば

data Revo = Eva String | Getter String Int

という型があったとする.ここで,データコンストラクタEvaをエクスポートしたいとすると,

module Revoltech (Revo(Eva),printRevo) where

とする.(Revoltechはモジュール名,printRevoは関数名)こうする事で,データコンストラクタGetterはエクスポートしないようになる.

また,データコンストラクタEvaのみをインポートする際は,

import Revoltech (Revo(Eva))

とすることでインポートできる.こうすることで,printRevoはインポートしない事になる.・・・はず.

基本的なインポート

特定エンティティのインポート

モジュールから無闇矢鱈とインポートするのではなく,必要なぶんだけ,他にインポートするモジュールと関数名が被らないように,特定のエンティティだけをインポートする.

import Text.Regex (mkRegex, matchRegex)

委譲みたいな感覚かな.

完全修飾名のみでエンティティにアクセスさせるように

先ほどと同じように,他にインポートするモジュールと関数名が被った時のために.こちらは,完全修飾名(Hoge.Huga.mapみたいな)のみでアクセスさせる方法.これには,qualified構文を使う.

import qualified Text.Regex

これで,Text.Regex.mkRegexを使うためにはText.Regex.mkRegexとしないとだめ.

as構文

qualifiedを使って完全修飾名のみにしたものの,長過ぎてアクセスが大変な時に.typedefみたいなもんか.ふつけるの例だと,こんなかんじ.

import qualified Distribution.Simple.GHCPackageConfig as Conf

こりゃ短い.