never executed always true always false
1 module HelVM.HelMA.Automata.ETA.Token where
2
3 import HelVM.HelIO.Control.Safe
4 import HelVM.HelIO.Digit.ToDigit
5
6 import Data.Vector as Vector
7
8 import qualified Text.Read
9 import qualified Text.Show
10
11 data Token
12 = E
13 | T
14 | A
15 | O
16 | I
17 | N
18 | S
19 | H
20 | R
21 deriving stock (Bounded, Enum, Eq, Read, Show)
22
23 type TokenList = [Token]
24 type TokenVector = Vector Token
25
26 instance ToDigit Token where
27 toDigit H = pure 0
28 toDigit T = pure 1
29 toDigit A = pure 2
30 toDigit O = pure 3
31 toDigit I = pure 4
32 toDigit N = pure 5
33 toDigit S = pure 6
34 toDigit t = liftErrorWithPrefix "Wrong token" $ show t
35
36 ----
37
38 newtype WhiteToken
39 = WhiteToken { unWhiteToken :: Token }
40 deriving stock (Eq)
41
42 type WhiteTokenList = [WhiteToken]
43
44 instance Show WhiteToken where
45 show (WhiteToken R) = "\n"
46 show (WhiteToken t) = show t
47
48 -- | Scanner
49 instance Read WhiteToken where
50 readsPrec _ "\n" = [( WhiteToken R , "")]
51 readsPrec _ "E" = [( WhiteToken E , "")]
52 readsPrec _ "T" = [( WhiteToken T , "")]
53 readsPrec _ "A" = [( WhiteToken A , "")]
54 readsPrec _ "O" = [( WhiteToken O , "")]
55 readsPrec _ "I" = [( WhiteToken I , "")]
56 readsPrec _ "N" = [( WhiteToken N , "")]
57 readsPrec _ "S" = [( WhiteToken S , "")]
58 readsPrec _ "H" = [( WhiteToken H , "")]
59 readsPrec _ _ = []
60
61 tokenToWhiteTokenPair ∷ Token → (WhiteToken , String)
62 tokenToWhiteTokenPair t = (WhiteToken t , "")
63
64 whiteTokenListToTokenList ∷ WhiteTokenList → TokenList
65 whiteTokenListToTokenList = fmap unWhiteToken