1

次の同義語の意味と読み方を誰か説明してくれませんか?

type TCM a = ErrorT String (StateT MyEnv IO) a

今までに理解できたこと:

  • あるタイプに新しい名前を導入すると言い、今はそれをTCMと呼び、いくつかのパラメータaを持っていると言います

  • String、(StateT MyEnv IO)、および

  • (StateT MyEnv IO) - ここでは、値コンストラクタ StateT と引数 MyEnv および IO があると言います。しかし、このタイプは何を作りますか?

私は正しいですか?誰かがそれがどのように機能するか説明してもらえますか? 返信ありがとうございます。

編集:誰かがこれについても私を助けてくれるかもしれません。私のプログラムには、整数を評価する次の関数があります。

ms_exp :: Exp -> TCM ()    
ms_exp (EInt integer) = do
    return integer

そして、そのようなエラーがあります:

Couldn't match expected type `()' with actual type `Integer'

ヒントはありますか?

4

1 に答える 1

6
  1. ええと、ErrorT型にはすでにa型パラメーターがありました。必要に応じて、それを特殊化できます。つまり、型を作成します

    type TCMInt = ErrorT String (StateT MyEnv IO) Int
    

    ただし、例で行ったように、型パラメーターとして残すことができます。

  2. いいえ、コンストラクターでErrorTはなく、コンストラクターです。の要素を構成するものは何ですか? まあ、それは何であるかによって異なります。Control.Monad.Errorだと思いますが、それは関数によって構築されていると言われています。ErrorTErrorTrunErrorT

  3. 繰り返しますが、コンストラクターでStateTはなく、コンストラクターです ( this に一致するキーワードで作成されます)。からわかるように、型コンストラクターは型を構築するために 2 つの型名を想定しているため、コードは と を渡し、型を生成します。newtypenewtype State s aStateMyEnvIOStateT MyEnv IO

更新するには:あなたの関数は、while you do を実行することによって、の要素()TCMモナドに注入することを期待しています。または のタイプをに変更する必要があります。return ()return integerreturn ()ms_expExp -> TCM Integer

于 2013-05-04T15:17:55.860 に答える