Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 在Haskell中将函数更改为Maybe函数_Function_Haskell_Monads - Fatal编程技术网

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-谢谢,修正了。