2014-03-04 69 views
1

我想創建Haskell的操作或功能顯示的情況下的表現,但我不能弄清楚如何...顯示Haskell的操作

我試圖

instance (Show (+)) where 
    show (+) = "+" 

但當然,它不起作用。有誰知道該怎麼做?

+2

'(+)'是不是一個類型。類型可以是實例但不是值。 –

+1

[顯示Haskell函數列表]的可能的重複(http://stackoverflow.com/questions/20848348/show-a-list-of-functions-in-haskell) –

+0

並從可能的重複:http:/ /www.haskell.org/haskellwiki/Show_instance_for_functions –

回答

4

這可能不是您要查找的內容,但它可能是最接近的:我們可以隨時將類型類簽名轉換爲具體的數據類型。

-- built it 
class Num a where 
    (+) :: a -> a -> a 
    (*) :: a -> a -> a 
    (-) :: a -> a -> a 
    negate :: a -> a 
    abs :: a -> a 
    signum :: a -> a 
    fromInteger :: Integer -> a 


-- ours 
data Num 
    = Plus Num Num 
    | Mult Num Num 
    | Subt Num Num 
    | Neg  Num 
    | Abs  Num 
    | Signun Num 
    | FromInt Integer 
deriving (Show) 

instance Num Num where 
    (+) = Plus 
    (-) = Subt 
    (*) = Mult 
    negate = Neg 
    abs = Abs 
    signum = Signum 
    fromInteger = FromInt 

而現在我們可以用我們的Num數據類型deriving (Show)位看錶情。

>>> 3 + 2 :: Num 
Plus (FromInt 3) (FromInt 2) 

但一般有比這沒辦法要簡單得多,顯示Haskell函數或運營商。通常,一旦你已經得到了一個類型的值一樣a -> b那麼你可以做的最好的事情,以檢查它是給它餵食a小號

instance Show a => Show (Bool -> a) where 
    show f = "Fun { True -> " ++ show (f True) ++ ", False -> " ++ show (f False) ++ " }" 

>>> id :: Bool -> Bool 
Fun { True -> True, False -> False } 

>>> not 
Fun { True -> False, False -> True}