Class 函数可以是Haskell中类的实例吗

Class 函数可以是Haskell中类的实例吗,class,function,haskell,types,instance,Class,Function,Haskell,Types,Instance,不起作用,而且 class A a instance A (Int -> Float) 工作 如果Haskell中的函数被视为第一类,而Int->float无疑是一种类型,尽管它不是一种*具体类型,为什么函数不能是类的实例呢 class B b instance B Int 是的,函数类型在Haskell中不是很特殊: {-# LANGUAGE FlexibleInstances #-} module TestFlexibleInstances where class A a i

不起作用,而且

class A a
instance A (Int -> Float)
工作
如果Haskell中的函数被视为第一类,而Int->float无疑是一种类型,尽管它不是一种*具体类型,为什么函数不能是类的实例呢

class B b
instance B Int

是的,函数类型在Haskell中不是很特殊:

{-# LANGUAGE FlexibleInstances #-}

module TestFlexibleInstances where

class A a

instance A (Int -> Float)

正如shk在其回答中指出的,如果您想修复域或范围的类型,您需要像FlexibleInstances这样的扩展–但这与函数类型无关,并且对于其他类型构造函数应用程序(如Maybe Int)也是必需的。

它确实有效,我怎么知道一些问题是由于缺少语言扩展造成的?@user1926094 GHC在尝试实例Foo Int->Float时会给出错误消息,其中。。。应该在不太旧的GHCs中包含FlexibleInstances的建议。如果您想禁用它,我确实发现错误消息包含Use-XFlexibleInstances,但我只在shell中编译时将其作为选项。现在我意识到它也是一种语言扩展
module Test where

instance Show (a -> b) where
    show _ = "(function)"