¿Es posible escribir una función isFunc :: a -> Bool
para determinar si un valor arbitrario es una función (de cualquier tipo) de tal manera queDeterminar si un valor es una función en Haskell
foo :: Int -> Int
bar :: Char -> Char -> Char
> isFunc foo
True
> isFunc bar
True
> isFunc 3
False
> isFunc 'a'
False
estoy usando lo que Data.Dynamic no puede determinar el tipo de antemano.
'isFunc' no es una pregunta bien formado para preguntar en presencia de polimorfismo. Tengo una cosa de tipo 'a'; ¿es una función o no? La respuesta es indeterminada hasta que haya convertido 'a' en un tipo monomórfico, ya que hasta entonces podía elegir, por ejemplo,' a ~ Int' o 'a ~ Int -> Int'. Tu ejemplo 'isFunc 3' tiene exactamente este problema, y probablemente ni siquiera lo notaste; ¿Cómo sabes que '3' no es una función? –