反转自定义数据类型



考虑长度排序列表的以下数据类型:

data LordL a = LordL Int [a] deriving (Show, Eq, Ord)

这里有一个简单的构造函数:

LordL :: [a] -> LordL a
LordL xs = LordL (length xs) xs
ex) LordL [1,2,3] => LordL 3 [1,2,3]

现在,我一直在尝试实现一种方法,该方法包括反转列表,但一直未能使其工作。以下是我的想法:

rev xs = LordL (length xs) (reverse xs)

当我尝试运行文件时,这是我得到的消息:

Couldn't match expected type ‘[a]’ with actual type ‘LordL a’

有什么我应该做的不同吗?

这里rev可能应该取一个LordL a对象,所以您可以"打开包装";Lordl对象,并反转列表,因此:

rev :: LordL a -> LordL a
rev(LordLl xs)= LordL l (reverse xs)

我们不必重新计算长度,因为列表的反向长度与该列表的长度相同。

最新更新