exposing
code:Elm
module MyModule exposing (myFunction)
-- ファイルの先頭に書くexposing
import MyLibrary exposing (function)
-- importに書くexposing
2種類あります。書き方は一緒です
module文に付けるexposingは省略不可、モジュール外に公開する関数や型を書きます import文に付けるexposingは省略可、モジュール内でモジュール名の修飾なしで関数などを使えるようにします 全部公開、全部使う
code:Elm
module MyModule exposing (..)
import MyLibrary exposing (..)
特に気にならなければ(..)で全部公開するし、全部importする
importで複数モジュールだばぁして、関数名とかが被った場合、ambiguous なんとかエラーが出ます
つまりimportの順番に意味はありません
関数
普通に名前書いてexposingするだけ
code:Elm
import Html exposing (div, h1, text)
type aliasした型
これもそのまま
Union型
3パターン
code:Elm
module Types exposing (MyType) -- 1
module Types exposing (MyType(A, B)) -- 2
module Types exposing (MyType(..)) -- 3
type MyType = A | B | C
3は全部公開する
分からないうちは全部これでいいし、package作るのでなければこれでいい
パターンマッチも値作るのも同じモジュール内でやるのと変わらないようになる
1では型名のみexposingする
これをすると他のモジュールからはMyType型を自分で作ったり、パターンマッチで分解したりできなくなるのでカプセル化みたいなことになる ライブラリで外部には触らせない型に使う
一部だけ値を作れたりパターンマッチで分解できるようになる(公開されてないパターンは_で受ければパターンが網羅されるのでコンパイルが通る)
これ使わなくない・・・?