haskell - 如何做左虚?

标签 haskell category-theory

我正在努力理解 https://hackage.haskell.org/package/base-4.14.0.0/docs/Data-Void.html并有以下示例:

let x :: Either Void Int; x = Left Void

代码没有被编译。如何让它运行起来?

最佳答案

Void type 是它没有居民(除了“底部”值,如异常和无限循环)。你可以

x, y, z :: Either Void Int
x = undefined
y = Left $ error "Whoops"
z = Left $ let q = q in q

但所有这些都违反了Void的基本概念.

Either Void Int 类型的唯一“合法”值形式为 Right i , 其中i :: Int .

确实,你可以这样写:

unEither :: Either Void a -> a
unEither (Left v) = absurd v
unEither (Right a) = a

关于haskell - 如何做左虚?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62141593/

相关文章:

haskell - 为除一种特定类型之外的所有类生成一个实例

scala - Scala 的 Option 以何种方式折叠 catamorphism?

c# - 有用或不重要的双重接口(interface)的例子

agda - 是否可以在没有函数外延性的情况下证明 Agda 中范畴范畴(以仿函数作为态射)的存在性?

parsing - Haskell 解析器组合器

haskell - 合并具有独特元素的列表

regex - Haskell Posix 中的多行匹配

haskell - ResourceT、MonadTrans 实例不可用

haskell - 集合的应用实例(嵌套列表)

haskell - 复合模式是否可以用于从树生成 HTML 并处理缩进,或者这本质上是不可能的?