我目前正在学习 haskell,我很难理解如何解释<$>and<*>的行为。
对于某些上下文,这一切都来自搜索如何or在使用时使用操作takeWhile,我发现的答案是这样的
takeWhile ((||) <$> isDigit <*> (=='.'))
Run Code Online (Sandbox Code Playgroud)
在我见过的大多数文档中,<*>与容器类型一起使用。
show <*> Maybe 10
Run Code Online (Sandbox Code Playgroud)
通过查看
(<$>) :: Functor f => (a -> b) -> f a -> f b
Run Code Online (Sandbox Code Playgroud)
它告诉我 <*> 保留外部容器(如果其内容)并将权限应用于内部,然后将其包装回容器中
a b f a f b
([Int] -> String) -> [Just]([Int]) -> [Just]([String])
Run Code Online (Sandbox Code Playgroud)
这对我来说是有意义的,在我看来,这f a本质上是在容器内部发生的,但是当我尝试相同的逻辑时,我可以理解,但我无法将逻辑关联起来
f = (+) <$> (read)
Run Code Online (Sandbox Code Playgroud)
所以因为f它变成了
a b f a f b
([Int] -> [Int -> Int]) -> ([String] …Run Code Online (Sandbox Code Playgroud) haskell ×1