Haskell Alex - Fehler in der Wrapper-Vorlage

Ich versuche, Alex und Lexer im Allgemeinen zu verstehen, aber ich habe Probleme, meinen Lexer zu betreiben.

Ich habe Lexer in "Basic" - und "Posn" -Verpackungen geschrieben, aber ich konnte sie nicht in "Monad" -Verpackungen schreiben. Ich denke ich muss benutzenmonad Wrapper, weil ich Strings und Token-Positionen in der Eingabe sammeln muss. Ich brauche auch mehrere Staaten. Im Moment versuche ich dieses einfache Beispiel auszuführen:

<code>{
module Main (main) where
}

%wrapper "monad"

$whitespace = [\ \b\t\n\f\v\r]
$digit      = 0-9
$alpha      = [a-zA-Z_]
$upper      = [A-Z]
$lower      = [a-z]

@tidentifier = $upper($alpha|_|$digit)*
@identifier  = $lower($alpha|_|$digit)*


tokens :-

$whitespace+ ;
$upper $alpha+ { typeId }
$lower $alpha+ { id_ }
$digit+ { int }

{

data Lexeme = L AlexPosn LexemeClass String

data LexemeClass
        = TypeId String
        | Id String
        | Int Int
        | EOF
    deriving (Show, Eq)

typeId :: AlexInput -> Int -> Alex Lexeme
typeId = undefined

id_ :: AlexInput -> Int -> Alex Lexeme
id_ = undefined

int :: AlexInput -> Int -> Alex Lexeme
int = undefined

alexEOF = return (L undefined EOF "")

main :: IO ()
main = do
    s <- getContents
    let r = runAlex s $ do
                return alexMonadScan
    print r
}
</code>

Meine Handlungen sindundefined zur Zeit. Wenn ich versuche, es zu kompilieren, erhalte ich diesen Fehler:

<code>➜  haskell  ghc --make Tokens.hs
[1 of 1] Compiling Main             ( Tokens.hs, Tokens.o )

templates/wrappers.hs:208:17:
    Couldn't match expected type `(AlexPosn, Char, [Byte], String)'
                with actual type `(t0, t1, t2)'
    Expected type: AlexInput
      Actual type: (t0, t1, t2)
    In the return type of a call of `ignorePendingBytes'
    In the first argument of `action', namely
      `(ignorePendingBytes inp)'
</code>

Ich erhalte auch verschiedene Fehler, wenn ich versuche, Beispiele in Alex 'Github-Repo zu kompilieren. Könnte dies mit einer Versionsinkongruenz zusammenhängen? Ich habe alex von cabal mit ghc 7.0.4 installiert. Irgendwelche Ideen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage