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しないと型エラーが起きるやつに出くわしたmrsekut.icon
その時はfix関数を使って回避した
Record型がある
hsのrecord型の実態はタプルだが、psにはrecord型がある
IO型ではなくEffect型
例えば
code: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]mrsekut.icon
rangeの別名である
ifは式
型宣言のforallは明示的に常に必要
参考
PureScriptとElmの差異
deriving自動導出がない
代わりにStandaloneDerivingがある
guardという関数があるらしい
言語拡張はないが、デフォルトで似たようなものが入っている