我有一個從Network.HTTP獲取ResponseCode的函數。爲了使用QuickCheck測試它,我想寫一個用於ResponseCode的Arbitrary實例。 (如果您不知道,那麼ResponseCode只是該庫中三個整數:類型ResponseCode =(Int,Int,Int))。使用任意實例生成三元組(Network.HTTP.ResponseCode)
所以我寫了這樣的事情:
instance Arbitrary ResponseCode where
arbitrary = triple (elements [1..6])
where triple f = (f, f, f)
首先,GHC抱怨說我使用類型的方法是不是標準的Haskell,所以我將不得不使用一些編譯器標誌(這是不是真的我想要什麼,因爲我覺得必須有一個簡單的解決方案,這個簡單的問題沒有標誌)。
其次,我的任意函數有錯誤的類型,這很明顯。但後來我真的不知道如何編寫一個函數來返回一個從1到6的隨機Ints的三元組。
如果有人能幫助我,我將不勝感激。
謝謝。
很好的答案。唯一我要補充的是,如果你要創建一個新類型,並且由於'ResponseCode'顯然只有六個可能的值,所以你可以定義類似'data ResponseCode = Success |部分|失敗| FileNotFound | NotAuthorized |我是一個小茶壺「或者其他一些東西。 – 2012-04-27 15:08:42