PureScriptの型
String
docs
JavaScriptのruntimeのstring型と対応する
Number
jsの実行時のnumber型と対応する
Boolean
jsの実行時のbooleean型と対応する
Int
psとしてのint
実行時にはNumberになる #??
Char
https://pursuit.purescript.org/packages/purescript-strings/3.0.0/docs/Data.Char
Unit
docs
唯一つのinhabitantを持つ
Void
docs
inhabitantを一つも持たない
()
fieldが0個のrowを表す
コレクション系
Array
docs
配列を表す
JavaScriptのArrayに相当する
kindは*->*で、Array Intの様に指定する
[1,2,3]はArray Intの糖衣構文
monad #??
(..)という関数があるが、hsと微妙に異なる
a = 1..5で、a=[1,2,3,4,5]となる
a = [1..5]ではなくmrsekut.icon
rangeの別名
Sequence
docs
Arrayの再実装みたいなやつ
基本的にはArrayを使うべきで、要素数が1000を超えるぐらい大きくなったり、パフォーマンスの原因がArrayだとわかったならSequenceを使うことを検討すると良い ref
SeqとArray間の変換はどっち向きでもO(n)かかる
FFIなどでJSのArrayとやり取りする場合は、Arrayを使うほうが良い
List
docs
リストを表す
関数型チックな処理は得意だが、ランダムアクセスは不得意
hsみたいにListを引数に取る関数の定義はこんなノリで書く
code:purs(hs)
go Nil acc = Nothing
go (x : Nil) acc = Just { revInit: acc, last: x }
go (x : xs) acc = go xs (x : acc)
ほぼ同じだが、[]の糖衣構文がないため、:で書く必要がある
monad #??
(..)という関数があるが、hsと微妙に異なる
a = 1..3で、a=(1:2:3:Nil)となる
rangeの別名
Row, Record
PureScriptのRow型
PureScriptのRecord
Effect
Type-Holesが使える
型を書いておいて、未実装の部分を?hogeのようなsyntaxで定義しておく
するとコンパイルエラーで、型が適合する関数を提案してくれる
ブラウザを使ってPursuitから検索してもいいが同じことがIDE上で行える
VSCodeならcmd-.とか
code:purs(hs)
arrayToList :: forall a. Array a -> List a
arrayToList = ?whatGoesHere
https://github.com/paf31/24-days-of-purescript-2016/blob/master/23.markdown
documentation/Types.md at master · purescript/documentation
https://pursuit.purescript.org/builtins/docs/Prim#t:Record