// add : int -> int -> int let minus x y = x - y // minus : int -> int -> int let display = printfn "number is %d" // display : int -> unit // パイプライン演算⼦を使⽤しない通常の書き⽅ display(minus 20 (add 5 10)) // パイプライン演算⼦を使⽤した書き⽅ 10 |> add 5 |> minus 20 |> display // => "number is 5" 14
⽂法はLisp マクロもある defn simple-conversation [] (print "Hello! I'd like to get to know you. Tell me about yourself!") (setv name (input "What is your name? ")) (setv age (input "What is your age? ")) (print (+ "Hello " name "! I see you are " age " years old."))) (simple-conversation) 出典: Tutorial — hy 0.17.0 documentation 21
= x + 50 // add50 : int -> int let add100 x = x + 100 // add100 : int -> int let minus100 x = x - 100 // minus100 : int -> int // newFunc : int -> int let newFunc = add50 >> add100 >> minus100 newFunc 10 // => 10 30
- Wikipedia // 3 引数の関数は // (int, int, int) -> int だと普通は考えるが... let add x y z = x + y + z // add: int -> int -> int -> int let add' = add 1 // add': (1) int -> int -> int let add'' = add' 2 // add'': (1) (2) int -> int let result = add'' 3 // result: (1) (2) (3) int // => 6 40
Gender: int} // 1: male, 2: female let genderName person = match person with | { Name=n; Gender=1 } -> n + " is male" | { Name=n; Gender=2 } -> n + " is female" | _ -> "undeterminded" genderName {Name="Taro"; Gender=1} 61
b) -> f a -> f b Functor則 Functorを実装する際に満たすべき規則 # id でファンクター値を写した場合、ファンクター値が変化してはいけない fmap id = id # 、すべてのファンクター値x に対して以下の等式が成り⽴つ fmap (f . g) x = fmap f (fmap g x) 72