PureScript のモジュール宣言

PureScript のモジュール宣言

Haskell と少し違うのでメモとして残しておきます。

export list keyword
関数
型演算子 type
型クラス class
カインド kind
モジュール module

module 宣言の書き方

export リストを省略

全てが export されます。

module A where  

export リストを明示的に列挙

個別に export されます。

module A (f, g, ...) where  

複数行スタイル

module A  
  ( f  
  , g  
  , T1  
  , T2  
  ) where  

コンパイルエラーになる例

Haskell だと良く見る形の宣言ですが、PureScript ではコンパイルエラーになります。

module A () where  

export リストの指定

export できるものは以下の通りです。

  • 関数 (演算子)
  • 型 (レコード)
  • 型演算子
  • 型クラス
  • カインド
  • モジュール

関数

module A (f, const, (.+.)) where  

f :: Int  
f = 0  

const :: Int -> Int -> Int  
const x _ = x  

infixr 6 const as .+.  

module A where  

type T1 = Int  
newtype T2 = T2 Int  
data T3 = T3  
data T4 = T4 { a :: Int }  

上記の定義で進めます

type constructor のみを export する例

module A (T1, T2, T3, T4) where  

T () のような形式も使えるようです。

module A (T1, T2, T3 (), T4 ()) where  

type constructor と data constructor を export する例 (全部)

Haskell と同じく (..) を利用します。

module A (T1, T2, T3 (..), T4 (..)) where  

type constructor と data constructor を export する例 (明示的に列挙)

module A (T1, T2, T3 (T3), T4 (T4)) where  

レコードのフィールドを export する例

単純に data constructor を export するだけで良いみたいです。

module A (T1, T2, T3 (..), T4 (..)) where  

module A (T1, T2, T3 (T3), T4 (T4)) where  

型演算子

typeキーワードで export します。

module A(type (+.+)) where  

import Data.Tuple  

infixr 6 type Tuple as +.+  

型クラス

classキーワードで export します。その時メソッドも同様に export する必要があります。

module A (class C, f) where  

class C a where  
  f :: a -> Int  

カインド

kindキーワードで export します。

module A (kind Nat) where  

foreign import kind Nat  

モジュール

moduleキーワードで export します。

module E (module P, module Data.Maybe) where  

import Prelude (identity, Unit) as P  

参考リソース