PureScriptの型
String
JavaScriptのruntimeのstring型と対応する
Number
jsの実行時のnumber型と対応する
Boolean
jsの実行時のbooleean型と対応する
Int
psとしてのint
Char
Unit
Void
()
fieldが0個のrowを表す
コレクション系
Array
JavaScriptのArrayに相当する
kindは *->*
で、 Array Int
の様に指定する
[1,2,3]
は Array Int
の糖衣構文
(..)
という関数があるが、hsと微妙に異なる
a = 1..5
で、 a=[1,2,3,4,5]
となる
a = [1..5]
ではなく

rangeの別名
Sequence
Arrayの再実装みたいなやつ
基本的にはArrayを使うべきで、要素数が1000を超えるぐらい大きくなったり、パフォーマンスの原因がArrayだとわかったならSequenceを使うことを検討すると良い
refSeqとArray間の変換はどっち向きでも O(n)
かかる
FFIなどでJSのArrayとやり取りする場合は、Arrayを使うほうが良い
List
関数型チックな処理は得意だが、ランダムアクセスは不得意
hsみたいにListを引数に取る関数の定義はこんなノリで書く
purs(hs)go Nil acc = Nothing
go (x : Nil) acc = Just { revInit: acc, last: x }
go (x : xs) acc = go xs (x : acc)
ほぼ同じだが、 []
の糖衣構文がないため、 :
で書く必要がある
(..)
という関数があるが、hsと微妙に異なる
a = 1..3
で、 a=(1:2:3:Nil)
となる
rangeの別名
Row, Record
Effect
型を書いておいて、未実装の部分を ?hoge
のようなsyntaxで定義しておく
するとコンパイルエラーで、型が適合する関数を提案してくれる
ブラウザを使って
Pursuitから検索してもいいが同じことがIDE上で行える
VSCodeなら cmd-.
とか
purs(hs)arrayToList :: forall a. Array a -> List a
arrayToList = ?whatGoesHere