on 3437290 help sign in
62 lines 2.7 kB history raw
1---
2title: Haskell
3sort: 3
4next: true
5---
7# Haskell
9From [Steve Dee](https://github.com/mrdomino/hsnock/blob/master/Language/Nock5K/Spec.hs):
11```
12module Language.Nock5K.Spec where
13import Control.Monad.Instances
15wut (a :- b) = return $ Atom 0
16wut a = return $ Atom 1
18lus (a :- b) = Left "+[a b]"
19lus (Atom a) = return $ Atom (1 + a)
21tis (a :- a') | a == a' = return $ Atom 0
22tis (a :- b) = return $ Atom 1
23tis a = Left "=a"
25fas (Atom 1 :- a) = return a
26fas (Atom 2 :- a :- b) = return a
27fas (Atom 3 :- a :- b) = return b
28fas (Atom a :- b) | a > 3 = do x <- fas $ Atom (a `div` 2) :- b
29 fas $ Atom (2 + (a `mod` 2)) :- x
30fas a = Left "/a"
32tar (a :- (b :- c) :- d) = do x <- tar (a :- b :- c)
33 y <- tar (a :- d)
34 return $ x :- y
36tar (a :- Atom 0 :- b) = fas $ b :- a
37tar (a :- Atom 1 :- b) = return b
38tar (a :- Atom 2 :- b :- c) = do x <- tar (a :- b)
39 y <- tar (a :- c)
40 tar $ x :- y
41tar (a :- Atom 3 :- b) = tar (a :- b) >>= wut
42tar (a :- Atom 4 :- b) = tar (a :- b) >>= lus
43tar (a :- Atom 5 :- b) = tar (a :- b) >>= tis
45tar (a :- Atom 6 :- b :- c :- d) = tar (a :- Atom 2 :- (Atom 0 :- Atom 1) :-
46 Atom 2 :- (Atom 1 :- c :- d) :-
47 (Atom 1 :- Atom 0) :- Atom 2 :-
48 (Atom 1 :- Atom 2 :- Atom 3) :-
49 (Atom 1 :- Atom 0) :- Atom 4 :-
50 Atom 4 :- b)
51tar (a :- Atom 7 :- b :- c) = tar (a :- Atom 2 :- b :- Atom 1 :- c)
52tar (a :- Atom 8 :- b :- c) = tar (a :- Atom 7 :-
53 ((Atom 7 :- (Atom 0 :- Atom 1) :- b) :-
54 Atom 0 :- Atom 1) :- c)
55tar (a :- Atom 9 :- b :- c) = tar (a :- Atom 7 :- c :- Atom 2 :-
56 (Atom 0 :- Atom 1) :- Atom 0 :- b)
57tar (a :- Atom 10 :- (b :- c) :- d) = tar (a :- Atom 8 :- c :- Atom 7 :-
58 (Atom 0 :- Atom 3) :- d)
59tar (a :- Atom 10 :- b :- c) = tar (a :- c)
61tar a = Left "*a"
62```