有人可以解释一下以下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)
任何提示?
好吧,ErrorT类型已经有了a类型参数,如果我们希望,我们可以专门化它,即make类型
type TCMInt = ErrorT String (StateT MyEnv IO) Int
Run Code Online (Sandbox Code Playgroud)
但是,我们可以将其保留为类型参数,就像您在示例中所做的那样.
不,ErrorT不是值构造函数,它是一个类型构造函数.什么使元素成为ErrorT?嗯,这取决于什么ErrorT.我想它是Control.Monad.Error,据说它是由runErrorT函数构造的.
同样,StateT不是一个值的构造,它是一种类型的构造(具有创建newtype关键字acoording到这个).从中可以看出newtype State s a,State类型构造函数需要两个类型名称来构造一个类型,因此代码会传递MyEnv并IO产生StateT MyEnv IO类型.
更新:你的函数希望在你做的时候注入一个元素()到TCMmonad中.您需要或更改to 的类型.return ()return integerreturn ()ms_expExp -> TCM Integer
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |