【发布时间】:2012-12-10 21:27:49
【问题描述】:
class A a
instance A (Int -> Float)
不起作用并且
class B b
instance B Int
作品 如果将 Haskell 中的函数作为第一个类,并且 (Int -> Float) 无疑是一种类型,尽管它不是 (*) 具体类型,为什么函数不能是类的实例
【问题讨论】:
标签: class function haskell types instance
class A a
instance A (Int -> Float)
不起作用并且
class B b
instance B Int
作品 如果将 Haskell 中的函数作为第一个类,并且 (Int -> Float) 无疑是一种类型,尽管它不是 (*) 具体类型,为什么函数不能是类的实例
【问题讨论】:
标签: class function haskell types instance
使用 FlexibleInstances 扩展,您可以做到这一点:
{-# LANGUAGE FlexibleInstances #-}
module TestFlexibleInstances where
class A a
instance A (Int -> Float)
【讨论】:
instance Foo (Int -> Float) where ... 时给出的错误消息应该包含(在不太旧的 GHC 中)FlexibleInstances 的建议。
是的,函数类型在 Haskell 中不是很特殊:
module Test where
instance Show (a -> b) where
show _ = "(function)"
正如 shk 在他的回答中指出的那样,如果您想修复域或范围的类型,您将需要像 FlexibleInstances 这样的扩展——但这与函数类型无关,其他类型需要Maybe Int 之类的构造函数应用程序也是如此。
【讨论】: