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 = ByteString
Prelude
作りがもっとお手軽に!Prelude
作りがお手軽になると…
Prelude
以外import
しちゃいけない」みたいなルールを設定すれば、モジュール間の依存の可否を明示しやすくなるどちらも「module
のqualified
nameをそのままexportする」を一般化して、
「module
の中で入れ子のmodule
を定義」できるようにしている:
First class modulesの例から:
構文が違う(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 )