【发布时间】:2019-12-16 18:04:49
【问题描述】:
给定一个类型,确定你是否可以编写一个总的、终止 Haskell 函数。
对于像Int -> Int 这样的类型,我们知道有限精度整数类型 Int 至少覆盖了[-2^29, 2^29-1] 的范围,因此我们可以从 Int 到 Int 的映射是有限的,所以我们可以写出一个总数,终止函数。
例如,给定以下类型:(a -> b) -> (b -> c) -> (a -> c),我如何确定我们是否可以编写一个总终止函数来使用该类型作为函数签名?或者这个类型(a -> c) -> ((a, b) -> c)。
非常感谢您通过此问题获得指导!这是一个家庭作业问题,所以我只是寻求指导。
【问题讨论】:
-
我很确定,在处理 GHC 支持的所有类型(包括 GADT)时,通常无法确定给定类型是否被某个总词所占据。