2017-04-06 62 views
3

在haskell 1 :: Num a => a如何定義像1這樣的對象?

我(如果以任何方式)怎麼能複製這種行爲,即 定義類型類MyNum,(可能是類型和實例) 和對象One這是 型One :: MyNum a => a的?

+0

'1'不是一個對象! '1 :: Integer','1 :: Int','1 :: Double'等都是完全不同的值。 –

回答

4
class MyNum a where 
    one :: a 

現在one :: MyNum a => a。你可以再寫

instance MyNum Int where 
    one = 1 

等等。

不知道你在做什麼實際上試圖實現,或者如果這只是一個玩具實驗或什麼的。但我認爲這回答了這個問題。

+0

我只是好奇如何使用類型類約束定義對象而不使用這些對象。 – Adam

+0

另外,如果我們使用'class MyNum a where fromString :: String - >'',我們可以寫'fromString'1''並且將會有'MyNum a => a'類型。這實際上類似於'Num'類,它有一個方法'fromInteger :: Integer - > a',所以'fromInteger(21 :: Integer)'具有有界的多態類型。 – chi

+1

一般來說,爲了得到'c a => a'這樣的類型類'c',該類型類必須有一個帶有'a'的函數。 – Lazersmoke

相關問題