Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 什么';OrderedList和SortedList的区别是什么_Haskell_Quickcheck - Fatal编程技术网

Haskell 什么';OrderedList和SortedList的区别是什么

Haskell 什么';OrderedList和SortedList的区别是什么,haskell,quickcheck,Haskell,Quickcheck,提供OrderedList和SortedList SortedList的文档说明: Sorted xs:保证对xs进行排序 OrderedList的文档说明: Ordered xs:保证xs已订购 (我猜应该分别是SortedList xs和OrderedList xs) 排序的列表和排序的列表有什么区别;dr:我认为应该弃用OrderedList,它的shrink实现移植到SortedList 它们都被定义为 newtype FooList a = Foo { getFoo :: [a] }

提供
OrderedList
SortedList

SortedList
的文档说明:

Sorted xs
:保证对
xs
进行排序

OrderedList
的文档说明:

Ordered xs
:保证
xs
已订购

(我猜应该分别是
SortedList xs
OrderedList xs


排序的列表和排序的列表有什么区别;dr:我认为应该弃用
OrderedList
,它的
shrink
实现移植到
SortedList

它们都被定义为

newtype FooList a = Foo { getFoo :: [a] }
但是有不同的
Foo
选择。(旁白:这解释了为什么文档中说
排序的xs
有序的xs
而不是
排序列表xs
有序列表xs
——这些是计算级术语,而不是类型级术语,所以文档是正确的!)

除了实例之外,没有其他可用的特殊帮助器函数,因此如果存在差异,则必须在实例中。两者都派生出
(Eq、Ord、Read、Show、Typeable)
,因此没有区别

OrderedList
有一个
Functor
实例,而
SortedList
没有,但我认为
OrderedList
也不应该有一个实例:它的
fmap
并没有保留被订购文档所承诺的不变量。这一事实是我对是否弃用
SortedList
OrderedList
的要求:弃用带有坏的
Functor
实例的一个,这样您就只需要一个向后不兼容的更改来删除一个类型,而不是弃用一个并从另一个实例中删除坏的
Functor
实例

任意
实例几乎相同:

instance (Ord a, Arbitrary a) => Arbitrary (OrderedList a) where
  arbitrary = Ordered `fmap` orderedList

  shrink (Ordered xs) =
    [ Ordered xs'
    | xs' <- shrink xs
    , sort xs' == xs'
    ]

orderedList :: (Ord a, Arbitrary a) => Gen [a]
orderedList = sort `fmap` arbitrary

instance (Arbitrary a, Ord a) => Arbitrary (SortedList a) where
  arbitrary = fmap (Sorted . sort) arbitrary

  shrink (Sorted xs) =
    [ Sorted xs'
    | xs' <- map sort (shrink xs)
    ]
实例(Ord a,任意a)=>任意(OrderedList a),其中
任意=有序的`fmap`orderedList
收缩(订购xs)=
[订购xs'
|xs'根[a]
orderedList=sort`fmap`任意
实例(任意a,Ord a)=>任意(分类列表a),其中
任意=fmap(Sorted.sort)任意
收缩(已排序的xs)=
[已排序的xs'
|xs'