2015-12-21 51 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