私は現在、式パーサーを書いています。私は、字句解析と構文解析を行いましたが、今ではタイプをチェックしています。私はこの(簡易版)のようなデータstructireで式を持っている:新しいタイプを導入するHaskell関数を作成するには?
data Expr = EBinaryOp String Expr Expr
| EInt Int
| EFloat Float
そして今、私は新しいタイプにこれを変換します機能を必要とし、また、型情報が含まれますTypedExpr
を、言います。そして今私の主な問題は、このタイプがどのように見えるかです。
data TypedExpr t = TEBinaryOp (TBinaryOp a b t) (TExpr a) (TExpr b)
| TEConstant t
addTypes :: (ExprType t) => Expr -> TypedExpr t
またはなし::
data TypedExpr = TEBinaryOp Type BinaryOp TypedExpr TypedExpr
| TEConstant Type Dynamic
addTypes :: Expr -> TypedExpr
このアプローチは、あなたが式の型を知っていることを前提としているので、私は最初のオプションで始めたが、私は問題に走った型パラメータを持つ - 私は2つのアイデアを持っていますそれを解析する前に(私にとっては、ほとんどの場合そうですが、必ずしもそうではありません)。しかし、私はHaskellの型システムを使用し、コンパイル時に大部分のエラーをチェックできるので、好きです。
最初のオプションで行うことはできますか?
どちらを選択しますか?どうして?
各オプションにはどのような問題がありますか?あなたは、実行時に解析をやっているので
うわー!面白い考え。それを考えることは決してありません:) – mik01aj
私はあなたの解決策をあまりにもよく理解していないと思います - 「eInt」、「eBinaryOp」は何をすべきでしょうか?私はこのモデルに 'Expr'をどこに入れますか? – mik01aj