PureScriptとHaskellの差異
head :: ∀ a. List a -> Maybe a
hsでは .
のやつ
psでは .
はレコードのアクセスに使われる
逆向きの >>>
もある
origin = { x: 0, y: 0 }
に対しては、 origin.x
のようにして呼ぶ
hsでは x origin
のようにして呼ぶ
型クラスの継承を表す矢印が逆向き
class A <= B where
これは B
を定義する際の記述
A
を継承するということを述べている
<=
を含意と見ればいい
上の例では「 B
を満たすなら、 A
を満たす」と読める
つまり、 B
は A
を継承する、ということになる
Lazyを行うためのlibraryなどもある
parser書く時にlazyしないと型エラーが起きるやつに出くわした

その時は fix
関数を使って回避した
Record型がある
hsのrecord型の実態はタプルだが、psにはrecord型がある
IO
型ではなく Effect
型
例えば
purs(hs)double = (2 * _)
double 10 -- 20
代わりに(?)、psでは double = (*2)
とは書けない
defaultで全域関数
部分関数にしたい場合はPartialをつける
case
の漏れもdefaultでcheckされる
Haskellは -Wincomplete-patterns
をつけないとだめ、みたいなのがあったが気する
return
はなく pure
のみ
Char
と String
は別物の型
[Char] == String
ではない
そもそも []
は List
ではなく、 Array
を表す
PureScriptは [1..5]
みたいな書き方ができない?
a = 1..5
で、 a=[1,2,3,4,5]
という意味ではなく
hsでは
a = [1..5]

rangeの別名である
if
は式
型宣言の forall
は明示的に常に必要
参考
PureScriptとElmの差異
deriving自動導出がない
代わりに StandaloneDeriving
がある
guard
という関数があるらしい
言語拡張はないが、デフォルトで似たようなものが入っている