如何实现typeOf函数?

时间:2017-07-23 00:43:24

标签: function types idris first-class

由于类型在Idris中是一流的,似乎我应该能够编写一个返回其参数类型的typeOf函数:

typeOf : a => a -> Type
typeOf x = a

但是,当我尝试调用此函数时,我看起来像是一个错误:

*example> typeOf 42
Can't find implementation for Integer

如何正确实现此typeOf功能?或者是否有更为微妙的想法来获取价值类型"我失踪了,这会阻止这种功能的存在吗?

1 个答案:

答案 0 :(得分:8)

这样写:

typeOf : {a : Type} -> a -> Type
typeOf {a} _ = a

a => b是一个函数,它有一个由接口解析填充的隐式参数。 {a : b} -> c是一个函数,其中隐式参数由统一填充。

此处无需参考接口。每个术语都有一种类型。如果您撰写typeOf 42,则隐式a会通过统一推断为Integer

相关问题