是否可以编写函数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/

10-12 22:58