Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell “是否有新的类型?”;“字符串”中的任意一个;?_Haskell - Fatal编程技术网

Haskell “是否有新的类型?”;“字符串”中的任意一个;?

Haskell “是否有新的类型?”;“字符串”中的任意一个;?,haskell,Haskell,forall m。MonadFail m=>m可以替换为任一字符串,方法是替换pure=Right和fail=Left。但是,由于MonadFail的earth String实例不会很快出现(),如果我想将MonadFail与earth组合,我想我会使用一种新类型的earth String 也就是说,我相信已经有很多人提出了同样的想法。是否有任何包已经定义了这样一个新类型?我尝试过谷歌搜索,但没有成功 (用例:在纯代码中使用,即在(新类型的)或)中使用对于给定的monad,MonadFail m

forall m。MonadFail m=>m
可以替换为
任一字符串,方法是替换
pure=Right
fail=Left
。但是,由于
MonadFail
earth String
实例不会很快出现(),如果我想将
MonadFail
earth
组合,我想我会使用一种新类型的
earth String

也就是说,我相信已经有很多人提出了同样的想法。是否有任何包已经定义了这样一个新类型?我尝试过谷歌搜索,但没有成功


(用例:在纯代码中使用,即在(新类型的)

中使用对于给定的monad,
MonadFail m
是一个约束,而不是一个类型
MonadFail
是一个类型类(kind
(Type->Type)->Constraint
),而不是像
或者String
(kind
Type->Type
)那样的类型构造函数。@chepner我知道,这就是为什么我在问题中包括
for all m.
。但是我想我应该为所有的m写
。MonadFail m=>m
。无论如何,我相信您理解我的意图。因此,您可以对
字符串a
值进行模式匹配,以决定是调用
还是
失败
,但这些是函数,而不是数据构造函数。对于类型为
MonadFail m=>ma
的任意值,您可以做任何类似的事情来决定是生成
Right
还是
Left
值,忽略一个事实,即您不能简单地从
ma
值中提取类型为
a
的值。@chepner if
MonadFail(任一字符串)
如果存在,则可以用数据构造函数替换函数。这就是问题的关键所在。如果您不介意引入语言扩展(和孤立实例),这实际上是可能的。只要将
ma
推断为
任一字符串a
,我们就可以对其进行模式匹配。我只是反驳你的猜测,即
MonadFail m=>ma
任一字符串a
同构。