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