【问题标题】:Instancing arbitrary任意实例化
【发布时间】:2015-12-21 23:55:38
【问题描述】:

我在为我的数据类型编写任意实例时遇到问题。如下:

    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'

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

【问题讨论】:

  • 我不确定这是否正确,但你可以试试oneof [liftM FL arbitrary] 吗?
  • 我希望 liftM FL arbitrary 可以工作,而不需要 oneof
  • 我得到了这个'不在范围内:数据构造函数 FL'
  • 你需要从定义它的模块中导出,然后在定义实例的模块中导入。
  • “导入收藏夹列表”还不够吗? @AlexeyRomanov

标签: haskell instance


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2020-11-28
    相关资源
    最近更新 更多