Ich bin nicht sehr gut hoskell programer. Ich bin beauftragt, einen Compiler an meiner Universität zu schreiben, und ich habe Haskell gewählt, weil es ein gutes Werkzeug für diesen Zweck ist. Ich bin mit StateT Monaden und außer, so habe ich Typen:Haskell StateT und ExceptT Kette
type Runner r s = StateT s (ExceptT LatteError IO) r
type RT r s = IO (Either LatteError (r, s))
Ich benutze es schaffen, ein Programm Baum gehen und asm-Code zu erzeugen und es funktioniert, wie ich will. Als Hauptfunktion für das Gehen über Baum verwende ich
rProgram :: Program -> Runner [String] CompileState
und Ergebnis auspacken Ich benutze Funktion
runR program = runExceptT (runStateT (rProgram program) initialCompileState)
Was möchte ich nicht zu tun ist, um einige Validatoren zu haben, wie Typprüfung, ident existance Scheck, und ich weiß, sie zu schreiben. Lets sagen, ich
tcProgram :: Program -> Runner() TypeCheckState
ieProgram :: Program -> Runner() IdentExistanceState
haben will ich sie beide in eleganter Art und Weise ausgeführt werden, und ein Fehler wird durch throwError angegeben. Wie man viele Funktionen wie sie zusammenstellt?
"Ich bin nicht sehr gut hoskell programer." Die Bereitschaft, diese Aufnahme bereits zu machen, sagt mir, dass Sie wahrscheinlich ein ziemlich guter Programmierer sind. – Alec