如何实现 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
。
由于在 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
。