never executed always true always false
1 module HelVM.HelMA.Automata.WhiteSpace.Token where
2
3 import HelVM.HelIO.Collections.SList
4 import HelVM.HelIO.Control.Safe
5 import HelVM.HelIO.Digit.ToDigit
6
7 import Text.Read
8
9 import qualified Text.Show
10
11 data Token
12 = S
13 | T
14 | N
15 deriving stock (Bounded, Enum, Eq, Read, Show)
16
17 type TokenList = [Token]
18 type TokenSList = SList Token
19
20 instance ToDigit Token where
21 toDigit S = pure 0
22 toDigit T = pure 1
23 toDigit t = liftErrorWithPrefix "Wrong token" $ show t
24
25 ----
26
27 newtype WhiteToken
28 = WhiteToken { unWhiteToken :: Token }
29 deriving stock (Eq)
30
31 instance Show WhiteToken where
32 show (WhiteToken S) = " "
33 show (WhiteToken T) = "\t"
34 show (WhiteToken N) = "\n"
35
36 -- | Scanner
37 instance Read WhiteToken where
38 readsPrec _ " " = [( WhiteToken S , "")]
39 readsPrec _ "\t" = [( WhiteToken T , "")]
40 readsPrec _ "\n" = [( WhiteToken N , "")]
41 readsPrec _ _ = []
42
43 type WhiteTokenList = [WhiteToken]
44
45 whiteTokenListToTokenList ∷ WhiteTokenList → TokenList
46 whiteTokenListToTokenList = fmap unWhiteToken
47