【发布时间】:2012-04-21 11:26:56
【问题描述】:
是否可以编写一个函数isFunc :: a -> Bool 来确定任意值是否是(任何类型的)函数,使得
foo :: Int -> Int
bar :: Char -> Char -> Char
> isFunc foo
True
> isFunc bar
True
> isFunc 3
False
> isFunc 'a'
False
我使用的是Data.Dynamic,所以无法提前确定类型。
【问题讨论】:
-
isFunc在存在多态性的情况下不是一个格式正确的问题。我有一个a类型的东西;它是一个功能吗?在我将a转换为单态类型之前,答案是不确定的,因为在那之前我可以选择a ~ Int或a ~ Int -> Int。您的isFunc 3示例正是有这个问题,您可能甚至没有注意到;你怎么知道3不是函数?