-- 数値
123
1.234
-- 文字列
"Hello, world!"
-- キャラクター
'c'
-- Boolean
True
False
-- Null 的なやつ
null -- エラー
Null -- エラー
nil -- エラー
Nil -- エラー
-- null は存在しない
-- 配列 (と言うかリスト)
[1, 2, 3]
["foo", "bar", "baz"]
['a', 'b', 'c'] -- => 文字列 "abc" とはならない
["foo", 123] -- => エラー。型が違う値を混在できない
[1..10] -- => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
1..10 -- => エラー。そんなものはない
--- 要素へのアクセス
[1..10][0] -- => エラー。こういう構文はない
List.head [0..10] -- => Just 0
List.drop 3 [0..10] |> List.head -- => Just 3
--- 連結
1 :: [2, 3,] -- => [1, 2, 3]
[1, 2, 3] ++ [4, 5, 6] -- => [1, 2, 3, 4, 5, 6]
-- タプル
(1,2)
("foo", 123)
-- オブジェクト的なやつ
object = {x = 123, y = 987}
object.x -- => 123
object.y -- => 987
--- 値の更新
{object | x <- 200}
{object | z = 345}
-- パターンマッチング的なやつ
case ("foo", 123) of
("foo", x) -> Just x
(_, x) -> Nothing
-- 条件分岐
if x > 0 then x else 0
-- 関数
square n = n^2
squareSum x y = x^2 + y^2
-- 関数適用
square 3 -- => 9
squareSum 4 5 -- => 41
squareSum 4 -- => <function> number -> number
(+) 1 2 --> 3
-- 無名関数
(\x -> x^2)
(\x y -> x^2 + y^2)
-- List 操作
List.map (\n -> n^2) [1..10] -- => [1,4,9,16,25,36,49,64,81,100]
List.foldl (+) 0 [1..10]
-- |>, <|
List.foldl (+) 0 (List map (\n -> n^2) [1..10])
[1..10] |> List.map (\n -> n^2) |> List.foldl (+) 0 -- => 385
-- Maybe
Just 123
Just "foo"
Just [1,2,3]
Nothing
Maybe.map (\n -> n^2) (Just 12) -- => Just 144
Maybe.map (\n -> n^2) Nothing -- => Nothing