発展: セパレートスキャナ
まんま
module Main where import Text.ParserCombinators.Parsec type Token = (SourcePos,Tok) data Tok = Identifier String | Reserved String | Symbol String | Price Int deriving Show --scanner :: [Char] -> ([Token],[String]) -- type Parser a = GenParser Char () a type MyParser a = GenParser Token () a mytoken :: (Tok -> Maybe a) -> MyParser a mytoken test = token showToken posToken testToken where showToken (pos,tok) = show tok posToken (pos,tok) = pos testToken (pos,tok) = test tok identifier :: MyParser String identifier = mytoken (\tok -> case tok of Identifier name -> Just name other -> Nothing) reserved :: String -> MyParser () reserved name = mytoken (\tok -> case tok of Reserved s | s == name -> Just () other -> Nothing)
全部が書かれていないようなので、、、