class A a
instance A (Int -> Float)
不起作用并且
class B b
instance B Int
工作如果 Haskell 中的函数被视为第一个类,并且 (Int -> Float) 无疑是一种类型,尽管它不是 (*) 具体类型,为什么函数不能是类的实例
是的,函数类型在 Haskell 中并不是很特别:
module Test where
instance Show (a -> b) where
show _ = "(function)"
正如 shk 在他的回答中指出的那样,如果您想修复域或范围的类型,您将需要像 FlexibleInstances 这样的扩展——但这与函数类型无关,并且对于其他类型的构造函数应用程序来说是必需的,例如Maybe Int
也是。
使用 FlexibleInstances 扩展,您可以这样做:
{-# LANGUAGE FlexibleInstances #-}
module TestFlexibleInstances where
class A a
instance A (Int -> Float)