2012-12-24 122 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