2012-10-06 81 views
3

我有一個類型類的參數變量,我想表示任何數字類型(Float,Integer,Double等)。參數變量類型

我如何在類型和實例中聲明這個?

回答

7

如果你指的類本身的類型參數,你可以添加一個約束到類定義的範圍內:

class (Num a) => Foo a where 
    -- stuff 

在另一方面,如果它是在一個函數的類型ISN參數「T類參數,那麼您可以在通常的方式添加約束條件:

class Foo a where 
    foo :: (Num b) => a -> b -> b 

如果你想將其限制在只有某些特定類型的,這是不是真的有可能 - 型類是‘開放式’,即,你總是可以添加實例。你可以做的最好的事情是擁有你自己的課程(FooNumbers等),只寫你想要的實例,然後需要它而不是Num。但這通常沒有幫助。

+0

最後的警告是對班級(數字a)=>選項的警告嗎? –

+0

@peroni_santo:不,它是關於試圖將它限制爲少數特定類型而不是「具有'Num'實例的任何東西」。我在代碼中給出的兩個例子都很好。 –