Function 在Haskell中将函数更改为Maybe函数
是否可以编写一个函数,它接受像Function 在Haskell中将函数更改为Maybe函数,function,haskell,monads,Function,Haskell,Monads,是否可以编写一个函数,它接受像(Something->Something)这样的函数并返回它,但类型是(Maybe Something->Maybe Something) e、 g: 我知道这与monad和应用程序有关,但我真的不知道怎么做。我玩了一会儿和,但什么也没得到 任何正确方向的帮助或指点都将不胜感激。谢谢 此函数满足签名,但我不知道它是否是您想要的: makeItMaybe :: (a -> a) -> (Maybe a -> Maybe a) makeItMaybe
(Something->Something)
这样的函数并返回它,但类型是(Maybe Something->Maybe Something)
e、 g:
我知道这与monad和应用程序有关,但我真的不知道怎么做。我玩了一会儿
和
,但什么也没得到
任何正确方向的帮助或指点都将不胜感激。谢谢 此函数满足签名,但我不知道它是否是您想要的:
makeItMaybe :: (a -> a) -> (Maybe a -> Maybe a)
makeItMaybe f (Just x) = Just (f x)
makeItMaybe f Nothing = Nothing
正如@baxbaxwalanuksiwe和@Lee所指出的,它是
fmap
来自Functor
类型类的Maybe
实例 此函数满足签名,但我不知道它是否是您想要的:
makeItMaybe :: (a -> a) -> (Maybe a -> Maybe a)
makeItMaybe f (Just x) = Just (f x)
makeItMaybe f Nothing = Nothing
正如@baxbaxwalanuksiwe和@Lee所指出的,它是
fmap
来自Functor
类型类的Maybe
实例 我想您正在寻找fmap
,它的类型是函子f=>(a->b)->fa->fb
。如果您将f
替换为Maybe
(因为Maybe
是一个函子),并将括号放在正确的位置(可能a->b)->(可能a->b)。您使用()
的方向是正确的,这只是fmap
的别名
所以我们有
makeItMaybe fx=fmap fx
或者更简单地说,makeItMaybe=fmap
我想你在寻找fmap
,它的类型是函子f=>(a->b)->fa fb
。如果您将f
替换为Maybe
(因为Maybe
是一个函子),并将括号放在正确的位置(可能a->b)->(可能a->b)。您使用()
的方向是正确的,这只是fmap
的别名
因此我们有
makeItMaybe fx=fmap fx
或者更简单地说,makeItMaybe=fmap
您想要的函数是fmap
:
makeItMaybe = fmap
fmap
由Functor
typeclass定义:
fmap :: Functor f => (a -> b) -> f a -> f b
Maybe
有一个函子实例,因此专门用于Maybe
的fmap
具有类型
(a -> b) -> Maybe a -> Maybe b
您需要的功能是
fmap
:
makeItMaybe = fmap
fmap
由Functor
typeclass定义:
fmap :: Functor f => (a -> b) -> f a -> f b
Maybe
有一个函子实例,因此专门用于Maybe
的fmap
具有类型
(a -> b) -> Maybe a -> Maybe b
如果第二个参数是
Nothing
,会发生什么情况?您确实可以定义makeitf Nothing=Nothing
,但这只是fmap
的定义。如果第二个参数是Nothing
,会发生什么?你确实可以定义makeitmakef Nothing=Nothing
,但这只是fmap
的定义makeitmakey=fmap
makeitmakeit=fmap
你在回答中使用了f
作为自由变量,但在问题中f
是makeitmakeitmakeit
的参数之一,因此,一个更准确的答案是makeItMaybe=fmap
,正如在公认的答案中一样。@amalloy-谢谢,修正了。您在答案中使用了f
作为自由变量,但在问题中f
是makeItMaybe
的参数之一,因此更准确的答案是makeitmakeitmaybe=fmap
,正如公认的答案一样。@amalloy-谢谢,修正了。