为什么foldl'给出错误,而foldl在相同的定义中工作正常

问题描述 投票:0回答:1

在这里我试图使用折叠重新实现安全最大值

import Data.ByteString (foldl')

maximum' :: Ord a => [a] -> Maybe a
maximum'  = foldl  (\ acc x -> max acc (Just x)) Nothing

maximum'' :: Ord a => [a] -> Maybe a
maximum'' = foldl' (\ acc x -> max acc (Just x)) Nothing

第一个使用 Foldl 的函数工作正常,但第二个函数给出了此错误:

• 无法匹配预期类型“a” 实际类型为“GHC.Word.Word8” ‘a’ 是一个刚性类型变量,受以下约束 类型签名: 最大'' :: forall a。排序 a => [a] -> 也许 a 在/home/mali/Projects/Deneme/HigherOrder.hs:60:1-36 • 在“Just”的第一个参数中,即“x” 在‘max’的第二个参数中,即‘(Just x)’ 表达式中: max acc (Just x)

foldl'不应该只是foldl的更高效版本吗?

haskell
1个回答
0
投票

您需要

foldl'
(适用于列表)中的
Prelude
,而不是
Data.ByteString
(适用于字节串)。您无需导入任何内容,因为
Prelude
会自动导入。

© www.soinside.com 2019 - 2024. All rights reserved.