2015-12-21 54 views
0

我無法寫任意的一個實例,爲我的數據類型。這是以下幾點:實例化任意

data FavoriteList a = FL [(a, Bool)] deriving Eq 

這是我有:

instance Arbitrary a => Arbitrary(FavoriteList a) where 
     arbitrary = oneof [liftM FavoriteList arbitrary] 

但我發現了以下錯誤:

Not in scope: data constructor 'FavoriteList' 

我可能不理解一些關於類型和建設者,我認爲...有人可以幫我嗎?

+1

我不知道這是否是正確的,但你可以嘗試'oneof [liftM FL任意]'? – epsilonhalbe

+1

我會期望只是'liftM FL任意'工作,而不需要'oneof'? –

+0

我得到這個「不在範圍:數據構造FL」 – Luxzero

回答

3

您正在嘗試使用類型級長期FavoriteList在價值層面。 FL是價值層面的術語,構建了你選擇的任何一個aFavoriteList a的價值。 FL <$> arbitrary應該是足夠的,或等價fmap FL arbitraryliftM FL arbitrary。有關Haskell的類型和價值級語言的更全面解釋,請參閱this excellent answer by Conor McBride