【发布时间】:2026-01-28 15:35:01
【问题描述】:
对不起标题,我不知道有没有更好的方式来用一句话来描述它。
我的想法是我想要一个函数类型来表示该函数接受一个参数但永远不会评估它。
我能想到的选择很少,我想知道什么是最好的:
(对于以下所有示例,Int 只是从任何具体类型中任意选择)
-
f :: forall a . a -> Int,喂f什么都行 -
f :: () -> Int,只有一个微不足道的价值需要评估 -
f :: Void -> Int,这可能是个坏主意,因为f = absurd和f可能与undefined或let x = x in x一起应用,但如果您知道f终止,那么您也知道它永远不会评估它的论点。 - 不知道有没有其他的方法,有的话请给点建议。
关于为什么我首先需要这样的函数:假设我想设计一个流处理库并让流处理器的类型类似于SP <input-type> <output-type>,并且处理器可能不需要任何输入。在某些时候,如果我想让它成为Arrow,我将不得不处理像<input-type> -> <output-type> 这样的函数。
【问题讨论】:
-
@duplode 感谢您的链接,这与我试图找出选择
()和Void的原因非常相关。
标签: haskell