实例化任意

Instancing arbitrary

我在为我的数据类型编写 Arbitrary 实例时遇到问题。以下是:

    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'

我可能不太了解类型和构造函数,我认为...有人可以帮我吗?

您正试图在值级别使用类型级别的术语 FavoriteListFL 是值级术语,它为您选择的 a 构造类型 FavoriteList a 的值。 FL <$> arbitrary 应该足够了,或者等同于 fmap FL arbitraryliftM FL arbitrary。有关 Haskell 类型和值级别语言的更详尽解释,请参阅 this excellent answer by Conor McBride