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

时间:2012-12-24 12:49:43

标签: class function haskell types instance

class A a
instance A (Int -> Float)

不起作用,

class B b
instance B Int

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

2 个答案:

答案 0 :(得分:7)

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

module Test where

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

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

答案 1 :(得分:3)

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

{-# LANGUAGE FlexibleInstances #-}

module TestFlexibleInstances where

class A a

instance A (Int -> Float)