Idris:是否可以使用“ with”重写所有函数以使用“ case”而不是“ with”?如果没有,您能举个反例吗?

杰格德斯

在Idris中,是否可以使用“ with重写所有函数以使用“ case”而不是“ with”?

如果没有,您能举个反例吗?

安德拉斯·科瓦奇(AndrásKovács)

不可能。当您使用模式匹配时with,将使用从匹配的构造函数中提取的信息来更新上下文中的类型。case不会引起这种更新。

例如,以下适用于with但不适用于case

import Data.So

-- here (n == 10) in the goal type is rewritten to True or False
-- after the match
maybeTen : (n : Nat) -> Maybe (So (n == 10))
maybeTen n with (n == 10)
  maybeTen n | False = Nothing
  maybeTen n | True  = Just Oh

-- Here the context knows nothing about the result of (n == 10)
-- after the "case" match, so we can't fill in the rhs
maybeTen' : (n : Nat) -> Maybe (So (n == 10))
maybeTen' n = case (n == 10) of
  True  => ?a 
  False => ?b

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档