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