在这里我试图使用折叠重新实现安全最大值
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的更高效版本吗?
您需要
foldl'
(适用于列表)中的 Prelude
,而不是 Data.ByteString
(适用于字节串)。您无需导入任何内容,因为 Prelude
会自动导入。