由于类型在Idris中是一流的,似乎我应该能够编写一个返回其参数类型的typeOf
函数:
typeOf : a => a -> Type
typeOf x = a
但是,当我尝试调用此函数时,我看起来像是一个错误:
*example> typeOf 42
Can't find implementation for Integer
如何正确实现此typeOf
功能?或者是否有更为微妙的想法来获取价值类型"我失踪了,这会阻止这种功能的存在吗?
答案 0 :(得分:8)
这样写:
typeOf : {a : Type} -> a -> Type
typeOf {a} _ = a
a => b
是一个函数,它有一个由接口解析填充的隐式参数。 {a : b} -> c
是一个函数,其中隐式参数由统一填充。
此处无需参考接口。每个术语都有一种类型。如果您撰写typeOf 42
,则隐式a
会通过统一推断为Integer
。