在 Haskell 中将函数更改为 Maybe 函数
Changing function to Maybe function in Haskell
是否可以编写一个函数,它采用 (Something -> Something)
和 returns 之类的函数,但类型为 (Maybe Something -> Maybe Something)
?
例如:
f :: Point -> Point
f x = [some code goes here]
makeItMaybe :: (Point -> Point) -> (Maybe Point -> Maybe Point)
makeItMaybe x = ???
我知道它与 Monads 和 Applicatives 有关,但无法真正弄清楚如何。我试了一下 <*>
和 <$>
,但没有得到任何结果。
如能提供正确方向的帮助或指示,我们将不胜感激。谢谢!
这个函数满足签名,不知道是不是你想要的:
makeItMaybe :: (a -> a) -> (Maybe a -> Maybe a)
makeItMaybe f (Just x) = Just (f x)
makeItMaybe f Nothing = Nothing
正如@baxbaxwalanuksiwe 和@Lee 所指出的,它是 Functor
类型类中 Maybe
的 fmap
实例。
我认为您正在查找类型为 Functor f => (a -> b) -> f a -> f b
的 fmap
。如果将 f
替换为 Maybe
(因为 Maybe
是一个仿函数)并将括号放在正确的位置,您会得到 (a -> b) -> (Maybe a -> Maybe b)
。您使用 (<$>)
的方向是正确的,它只是 fmap
.
的别名
所以我们有 makeItMaybe f x = fmap f x
,或者更简单地说,makeItMaybe = fmap
。
你想要的函数是fmap
:
makeItMaybe = fmap
fmap
由 Functor
类型类定义:
fmap :: Functor f => (a -> b) -> f a -> f b
Maybe
有一个仿函数实例,所以 fmap
专用于 Maybe
有类型
(a -> b) -> Maybe a -> Maybe b
是否可以编写一个函数,它采用 (Something -> Something)
和 returns 之类的函数,但类型为 (Maybe Something -> Maybe Something)
?
例如:
f :: Point -> Point
f x = [some code goes here]
makeItMaybe :: (Point -> Point) -> (Maybe Point -> Maybe Point)
makeItMaybe x = ???
我知道它与 Monads 和 Applicatives 有关,但无法真正弄清楚如何。我试了一下 <*>
和 <$>
,但没有得到任何结果。
如能提供正确方向的帮助或指示,我们将不胜感激。谢谢!
这个函数满足签名,不知道是不是你想要的:
makeItMaybe :: (a -> a) -> (Maybe a -> Maybe a)
makeItMaybe f (Just x) = Just (f x)
makeItMaybe f Nothing = Nothing
正如@baxbaxwalanuksiwe 和@Lee 所指出的,它是 Functor
类型类中 Maybe
的 fmap
实例。
我认为您正在查找类型为 Functor f => (a -> b) -> f a -> f b
的 fmap
。如果将 f
替换为 Maybe
(因为 Maybe
是一个仿函数)并将括号放在正确的位置,您会得到 (a -> b) -> (Maybe a -> Maybe b)
。您使用 (<$>)
的方向是正确的,它只是 fmap
.
所以我们有 makeItMaybe f x = fmap f x
,或者更简单地说,makeItMaybe = fmap
。
你想要的函数是fmap
:
makeItMaybe = fmap
fmap
由 Functor
类型类定义:
fmap :: Functor f => (a -> b) -> f a -> f b
Maybe
有一个仿函数实例,所以 fmap
专用于 Maybe
有类型
(a -> b) -> Maybe a -> Maybe b