为了账号安全,请及时绑定邮箱和手机立即绑定

runST和功能组成

runST和功能组成

冉冉说 2019-10-18 15:02:56
为什么要进行此类型检查:runST $ return $ True尽管以下内容没有:runST . return $ TrueGHCI抱怨:Couldn't match expected type `forall s. ST s c0'            with actual type `m0 a0'Expected type: a0 -> forall s. ST s c0  Actual type: a0 -> m0 a0In the second argument of `(.)', namely `return'In the expression: runST . return
查看完整描述

3 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

这种runST $ do { ... }模式非常普遍,而且通常不会进行类型检查,这一点令人讨厌,GHC包括一些ST特定的类型检查技巧以使其起作用。这些黑客可能会在此处触发该($)版本,而不是该(.)版本。


查看完整回答
反对 回复 2019-10-18
?
梦里花落0921

TA贡献1772条经验 获得超5个赞

这些消息有点混淆了这一点(或者我感觉如此)。让我重写您的代码:


runST (return True)   -- return True is ST s Bool

(runST . return) True  -- cannot work

另一种表达方式是单态m0 a0(如果返回a0,则返回结果)不能与(forall s.ST sa)统一。


查看完整回答
反对 回复 2019-10-18
  • 3 回答
  • 0 关注
  • 595 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信