Yuji Yamamoto (山本悠滋)
2019-12-11 GHC勉強会
Prelude作りが捗るLocal modulesの例を超簡略化:
module B where
import A ( module M1 )
-- あるいは、👇と書くとM1がexportする識別子が M1. なしで使える
import A ( import module M1 )importする側で👆のように書くと、M1.というprefix付きでImport1の識別子が使えるPreludeで「どのモジュールをどうqualifiedしてimportするか」を明示できるようになる
RIOではstrictなByteStringとlazyなByteStringを同じモジュールからexportするためにtype LByteString = ByteStringPrelude作りがもっとお手軽に!Prelude作りがお手軽になると…
Prelude以外importしちゃいけない」みたいなルールを設定すれば、モジュール間の依存の可否を明示しやすくなるどちらも「moduleのqualified
nameをそのままexportする」を一般化して、
「moduleの中で入れ子のmoduleを定義」できるようにしている:
構文が違う(First class modules側の主張から):
First class modules:
ExportModuleNames: exportするときの構文の意味を変えよう
M changes to exports the name M as a module
binding.
M(a, b, .. c) exports M and some of its
names.M(..) exports M and all of its names.qualifiedしたときの説明がないよ!exampleには出てるのに!Local modulesが変えようとしている構文:
ほかにもLocal
modulesは、importやmoduleに関して新しい構文を定義している
importするときの構文
import A ( import module M1 )どちらの提案であれ、moduleの作者がユーザーに、qualified importするのを強制できる
module Data.Set ( Set, qualified module Set ) where
import module Set ( Set )
module Set ( Set, fromList ) where
data Set = ...
fromList = ...Space, Right Arrow or swipe left to move to next slide, click help below for more details