0
class A a
instance A (Int -> Float)

不起作用并且

class B b
instance B Int

工作如果 Haskell 中的函数被视为第一个类,并且 (Int -> Float) 无疑是一种类型,尽管它不是 (*) 具体类型,为什么函数不能是类的实例

4

2 回答 2

7

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

module Test where

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

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

于 2012-12-24T13:08:48.140 回答
3

使用 FlexibleInstances 扩展,您可以这样做:

{-# LANGUAGE FlexibleInstances #-}

module TestFlexibleInstances where

class A a

instance A (Int -> Float)
于 2012-12-24T12:58:19.063 回答