p.16
通常の数学における慣習に従い、Haskell の冪乗演算子は、乗算演算子と除算演算子よりも結合順位が高いとみなされます。
また、乗算演算子と除算演算子は、加算演算子と減算演算子よりも結合順位が高いとみなされます。
たとえば、「2*3^4」は「2*(3^4)」であり、「2+3*4」は「2+(3*4)」を意味します。さらに、冪乗演算子は右結合ですが、他の四つの演算子は左結合です。
たとえば、「2^3^4」は「2^(3^4)」であり、「2-3+4」は「(2-3)+4」です。ただし実際のプログラムでは、このような規則に頼るよりも、数式の中で括弧を明記したほうが意味が明瞭になることが多いでしょう。
Haskell では、[1,2,3,4,5]のように要素をカンマで区切り、角括弧で囲むことでリストを表します。
p.18
以下の表に、数学と Haskell とで関数適用の表記がどのように違うかを例示します。
数学 | Haskell |
f(x) | f x |
f(x, y) | f x y |
f(g(x)) | f (g x) |
f(x, g(y)) | f x (g y) |
f(xq)g(y) | f x * g y |
Haskell のプログラムを書いたファイルは、他の種類のファイルと区別するために、拡張子を .hsとする慣習があります。
p.20
Haskell では、慣習として、引数がリストである場合には名前の末尾に sを付けて複数の値を含んでいる可能性を示します。
たとえば、数値のリストは ns、任意の値のリストは xs、そして文字のリストのリストは cssのように名付けられるでしょう。
レベルが同じ定義は、プログラム中で先頭を完全に同じ列に揃えなければなりません。
このレイアウト規則により、定義を行頭揃えによってグループ化できます。
p.21
グループを明記する必要があれば、波括弧の中に定義をセミコロンで区切って書いてもかまいません。
インデントを文法に組み込むのはクソだな。
HaskellもPython並にクソか。
#code(haskell){{
a = b + c
where b = 1 c = 2
d = a * 2
}}
#code(haskell){{
a = b + c
where {b = 1; c = 2};
d = a * 2
}}
#code(haskell){{
a = b + c where {b = 1; c = 2}; d = a * 2
}}
これらは全部一緒の意味。
Haskell のコメントには、一行のコメントと囲みコメントの二つがあります。
記号「--」から行末までが一行のコメントです。
「{-」で始まり「-}」で終わる部分は囲みコメントです。
囲みコメントは、複数行にわたっても他のコメントを含んで入れ子になってもかまいません。