annotate exercises/src/AdditionParser.hs @ 29:53732b9605c7

add AdditionParser
author Markus Kaiser <markus.kaiser@in.tum.de>
date Fri, 11 Jan 2013 00:49:48 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
29
53732b9605c7 add AdditionParser
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
1 module AdditionParser where
53732b9605c7 add AdditionParser
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
2
53732b9605c7 add AdditionParser
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
3 import Data.Char
53732b9605c7 add AdditionParser
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
4 import Parser
53732b9605c7 add AdditionParser
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
5
53732b9605c7 add AdditionParser
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
6 digit :: Parser Char Char
53732b9605c7 add AdditionParser
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
7 digit = one isDigit
53732b9605c7 add AdditionParser
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
8
53732b9605c7 add AdditionParser
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
9 number :: Parser Char String
53732b9605c7 add AdditionParser
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
10 number = list1(one isDigit)
53732b9605c7 add AdditionParser
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
11
53732b9605c7 add AdditionParser
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
12 addition :: Parser Char [String]
53732b9605c7 add AdditionParser
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
13 addition = number *** optional (item '+' *** addition >>> snd) >>> ints
53732b9605c7 add AdditionParser
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
14 where
53732b9605c7 add AdditionParser
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
15 ints (x, Just y) = x : y
53732b9605c7 add AdditionParser
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
16 ints (x, _) = [x]
53732b9605c7 add AdditionParser
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
17
53732b9605c7 add AdditionParser
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
18 test = addition "2134+123+1+2+3"