2012-12-24 78 views
0
class A a 
instance A (Int -> Float) 

不作品和能功能是类的实例在Haskell

class B b 
instance B Int 

工作 如果在Haskell函数被取为第一类和(中间体 - >浮动)是undoubtly一类型,虽然它不是(*)的具体类型,为什么不能职能是类实例

回答

3

随着FlexibleInstances扩展,你可以这样做:

{-# LANGUAGE FlexibleInstances #-} 

module TestFlexibleInstances where 

class A a 

instance A (Int -> Float) 
+0

它确实有效,我怎么能知道一些问题是由于缺少语言扩展? – TorosFanny

+0

@ user1926094错误消息GHC试图尝试一个实例Foo(Int - > Float),其中......应该包含(在不太老的GHC中)'FlexibleInstances'的建议。 –

+0

我真的发现错误信息包含“使用-XFlexibleInstances,如果你想禁用这个”,但我只将它作为shell编译时的选项。现在我意识到它也是一个语言扩展 – TorosFanny

7

是,函数类型是不是很特别哈斯克尔:

module Test where 

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

正如在他的回答中指出新鸿基,如果你要修复的域或范围的类型,您将需要一个扩展如FlexibleInstances - 但与函数类型无关,并且对于其他类型的构造函数应用程序(如Maybe Int)也是必需的。

+0

谢谢,它真的工作 – TorosFanny