如何实现 typeOf 函数?

How can I implement a typeOf function?

由于在 Idris 中类型是第一个 class,看来我应该能够编写一个 typeOf 函数,returns 其参数的类型:

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

但是,当我尝试调用此函数时,我得到了一个错误消息:

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

我怎样才能正确实现这个 typeOf 功能? 还是我遗漏了 "getting the type of a value" 这个想法更微妙的东西,哪个会阻止这种功能的存在吗?

这样写:

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

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

这里没有必要提到接口。每个术语都有一个类型。如果你写 typeOf 42,隐含的 a 被统一推断为 Integer