Haskell同义词定义

Jos*_*rad 1 haskell

有人可以解释一下以下synonim的含义以及如何阅读它:

type TCM a = ErrorT String (StateT MyEnv IO) a
Run Code Online (Sandbox Code Playgroud)

到目前为止我能够理解的是:

  • 我们说我们为某种类型引入新名称,现在我们称之为TCM,它有一些参数a

  • 我们有值构造函数ErrorT(是什么让ErrorT?)有三个参数:String,(StateT MyEnv IO)和a

  • (StateT MyEnv IO) - 我们在这里说我们有值构造函数StateT和args MyEnv和IO.但这种类型是什么?

我对吗?谁能解释一下它是如何工作的?感谢您的回复.

编辑:也许有人可以帮我这个.我在我的程序中有以下函数来评估Integer:

ms_exp :: Exp -> TCM ()    
ms_exp (EInt integer) = do
    return integer
Run Code Online (Sandbox Code Playgroud)

它有这样的错误:

Couldn't match expected type `()' with actual type `Integer'
Run Code Online (Sandbox Code Playgroud)

任何提示?

kar*_*oss 6

  1. 好吧,ErrorT类型已经有了a类型参数,如果我们希望,我们可以专门化它,即make类型

    type TCMInt = ErrorT String (StateT MyEnv IO) Int
    
    Run Code Online (Sandbox Code Playgroud)

    但是,我们可以将其保留为类型参数,就像您在示例中所做的那样.

  2. 不,ErrorT不是构造函数,它是一个类型构造函数.什么使元素成为ErrorT?嗯,这取决于什么ErrorT.我想它是Control.Monad.Error,据说它是由runErrorT函数构造的.

  3. 同样,StateT不是一个的构造,它是一种类型的构造(具有创建newtype关键字acoording到这个).从中可以看出newtype State s a,State类型构造函数需要两个类型名称来构造一个类型,因此代码会传递MyEnvIO产生StateT MyEnv IO类型.

更新:你的函数希望在你做的时候注入一个元素()TCMmonad中.您需要或更改to 的类型.return ()return integerreturn ()ms_expExp -> TCM Integer