generated at
PureScriptとHaskellの差異
Haskellと比較して、PureScriptは、~~」という構文で書く



head が型安全 ref
head :: ∀ a. List a -> Maybe a

関数合成演算子は <<< ref
hsでは . のやつ
psでは . はレコードのアクセスに使われる
逆向きの >>> もある

レコード ref
origin = { x: 0, y: 0 } に対しては、 origin.x のようにして呼ぶ
hsでは x origin のようにして呼ぶ

型クラスの継承を表す矢印が逆向き
class A <= B where
これは B を定義する際の記述
A を継承するということを述べている
<= を含意と見ればいい
上の例では「 B を満たすなら、 A を満たす」と読める
つまり、 B A を継承する、ということになる



型クラスの階層が、より段階的になっている
例えばSemigroupoid型クラスとかがある


正格評価である
Lazyを行うためのlibraryなどもある
parser書く時にlazyしないと型エラーが起きるやつに出くわしたmrsekut
CycleInDeclarationというエラーが起きる
その時は fix 関数を使って回避した


Record型がある
hsのrecord型の実態はタプルだが、psにはrecord型がある


IO 型ではなく Effect


_ で関数を作れる ref
例えば
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] みたいな書き方ができない?
ArrayにもListにもその名前の関数はあるが、微妙にhsと異なるので注意
a = 1..5 で、 a=[1,2,3,4,5] という意味ではなく
hsでは a = [1..5] mrsekut
rangeの別名である


if は式

型宣言の forall は明示的に常に必要



参考


PureScriptとElmの差異





deriving自動導出がない
代わりに StandaloneDeriving がある
guard という関数があるらしい
言語拡張はないが、デフォルトで似たようなものが入っている