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'