是否可以编写函数isFunc :: a -> Bool
来确定任意值是否是函数(任何类型),使得
foo :: Int -> Int
bar :: Char -> Char -> Char
> isFunc foo
True
> isFunc bar
True
> isFunc 3
False
> isFunc 'a'
False
我正在使用Data.Dynamic,所以无法提前确定类型。
最佳答案
参数表示不。类型的唯一功能
a -> Bool
是常量函数。
但是,有了一些临时多态性和更多的chutzpah,您可以执行以下操作:
{-# LANGUAGE OverlappingInstances, FlexibleInstances #-}
class Sick x where
isFunc :: x -> Bool
instance Sick (a -> b) where
isFunc _ = True
instance Sick x where
isFunc _ = False
然后看起来你有
*Sick> isFunc 3
False
*Sick> isFunc id
True
但这似乎是一件奇怪的事情。得到的
Bool
对您有什么用?关于haskell - 确定值是否是Haskell中的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10258488/