我只是在查看haskell中最大函数的实现:
maximum :: forall a . Ord a => t a -> a
maximum = fromMaybe (errorWithoutStackTrace "maximum: empty structure") .
getMax . foldMap (Max #. (Just :: a -> Maybe a))
有人可以向我解释这段代码吗?
特别是我不清楚这部分是如何的
Max #. (Just :: a -> Maybe a)
的工作原理。什么#。意思?对我来说,它看起来像功能组合,但输入
:t #.
REPL中的给出错误。 另外我认为foldMap的参数应该是
形式Monoid m => a -> m
但我无法看到幺半群结构来自何处。
答案 0 :(得分:4)
#.
是一个可以使强制更容易使用的运算符。
f #. g
装置
类型
g
,强制使用f . g
类似地,
f .# g
装置
类型
f
,强制使用f . g
在大多数情况下,f #. g
只有在f
是newtype构造函数,newtype访问器和fmap
的某种组合时才有意义。
在我#.
中使用maximum
的原因可能是我过分热心。几乎可以肯定地用.
替换它没有任何问题。