Quicksort
qsort [] = []
qsort (x:xs) = qsort [y | y <- xs, y < x]
++ [x]
++ qsort [y | y <- xs, y >= x]
main = print (qsort [3 1 4 1 5 9 2 6])
Fibonacci with Memoization
fib_go 0 cache = (0, cache)
fib_go 1 cache = (1, cache)
fib_go n cache =
(a, c1) = fib_go (n - 1) cache
(b, c2) = fib_go (n - 2) c1
(a + b, c2)
fib n = fst (fib_go n [])
JSON Processing
get_field key obj =
unwrap (json_get key obj)
main =
src = "{\"name\": \"Alice\", \"age\": 30}"
parsed = unwrap (json_parse src)
print (get_field "name" parsed)
HTTP Server
handle fd =
req = fd_readline fd
fd_write fd "HTTP/1.0 200 OK\r\n\r\nHello!"
fd_close fd
main = scope
listener = tcp_listen 8080
loop l = client = tcp_accept l
spawn (handle client)
loop l
loop listener
Pipeline
main = [1 2 3 4 5 6 7 8 9 10]
|> filter even
|> map (\x -> x * x)
|> foldl (\a b -> a + b) 0
|> print
CLI Tool
dispatch [] = print "Usage: tool <cmd>"
dispatch ("greet":name:_) =
print "Hello, ${name}!"
dispatch ("version":_) = print "v1.0"
dispatch _ = print "Unknown command"
main = dispatch args
Binary Search Tree
data Tree a = Leaf | Node (Tree a) a (Tree a)
insert Leaf v = Node Leaf v Leaf
insert (Node l x r) v =
? v < x -> Node (insert l v) x r
: ? v > x -> Node l x (insert r v)
: Node l x r
member Leaf _ = false
member (Node l x r) v =
? v == x -> true
: ? v < x -> member l v
: member r v
State Machine
data Light = Red | Yellow | Green
next Red = Green
next Green = Yellow
next Yellow = Red
run_n state 0 = [show state]
run_n state n =
show state : run_n (next state) (n - 1)
main = print (run_n Red 6)