相关疑难解决方法(0)

Data.Void.absurd与different有什么不同?

我今天早些时候看到了荒谬功能的逆向,虽然我很清楚,任何可能的实现drusba :: a -> Void都永远不会终止(毕竟,它是不可能构建的Void),但我不明白为什么同样不是这样absurd :: Void -> a.考虑GHC的实施:

newtype Void = Void Void

absurd :: Void -> a
absurd a = a `seq` spin a where
   spin (Void b) = spin b
Run Code Online (Sandbox Code Playgroud)

spin在我看来,它无休止地解开了无限系列的Void新型包装器,即使你能找到Void传递它也永远不会返回.无法区分的实现类似于:

absurd :: Void -> a
absurd a = a `seq` undefined
Run Code Online (Sandbox Code Playgroud)

鉴于此,为什么我们说这absurd是一个值得生活在Data.Void中的适当函数,但是

drusba :: a -> Void
drusba = undefined
Run Code Online (Sandbox Code Playgroud)

是一个不可能定义的函数?它是否像以下那样?

absurd是一个总函数,为其(空)域中的任何输入提供非底部结果,而drusba为部分,给出其域中某些(实际上所有)输入的最低结果.

haskell

20
推荐指数
2
解决办法
1317
查看次数

()在Haskell中意味着什么

在一些Haskell代码中,我遇到了:

put :: s -> m ()
Run Code Online (Sandbox Code Playgroud)

()意味着什么?

我使用搜索引擎,但找不到()正确处理的搜索引擎.

haskell

11
推荐指数
4
解决办法
3175
查看次数

标签 统计

haskell ×2