首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >case-statement中的haskell部分应用程序

case-statement中的haskell部分应用程序
EN

Stack Overflow用户
提问于 2020-01-15 03:20:00
回答 1查看 57关注 0票数 1

我很难理解这个函数是怎么回事。我的理解是,fmap f x返回一个接受最后一个参数y的函数。但是,在case语句中,y何时被“馈送”给fmap f x呢?

代码语言:javascript
复制
func :: (Num a, Num b) => (a -> b -> c) -> Maybe a -> Maybe b -> Maybe c
func f x y = case fmap f x of
                      Nothing -> Nothing
                      Just z -> fmap z y
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-15 03:26:47

对于Maybe,函数器实例定义为:

代码语言:javascript
复制
instance Functor Maybe where
    fmap _ Nothing = Nothing
    fmap f (Just x) = Just (f x)

因此,对于f ~ Maybefmap是专门针对fmap :: (g -> h) -> Maybe g -> Maybe h的。

在您的特定情况下,f具有签名f :: a -> b -> c或更详细的ff :: a -> (b -> c)。这意味着对于我们的fmap签名,我们获得:

代码语言:javascript
复制
fmap :: (g ->    h    ) -> Maybe g -> Maybe h
   f ::  a -> (b -> c)
----------------------------------------------
g ~ a, h ~ (b -> c)

所以这意味着fmap f x的类型将是fmap f x :: Maybe (b -> c)。因此,它是一个包装b -> c类型的函数的Maybe

因此,我们可以在这里检查fmap f x是否为Just z,在这种情况下,z的类型为z :: b -> cNothing

如果它是一个Just z,那么我们可以使用z执行另一个fmap,从而获得一个Maybe c

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59740388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档