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