首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能从f= f₁y推导出f= f₁y吗?

不能从f= f₁y推导出f= f₁y吗?
EN

Stack Overflow用户
提问于 2014-04-22 20:09:24
回答 1查看 202关注 0票数 7
代码语言:javascript
复制
{-# LANGUAGE GADTs #-}

data Foo x y where
  Composition :: Foo b c -> Foo a b -> Foo a c
  FMap :: Functor f => (a->b) -> Foo (f a) (f b)

asFunction :: Foo a b -> a->b
asFunction (FMap m) = fmap m
-- asFunction (Composition (FMap m) (FMap n)) = fmap m . fmap n
asFunction (Composition m n) = asFunction m . asFunction n

就像预期的那样..。直到您取消对asFunction的第二个子句的评论!这实际上只是另外两种模式已经匹配的特例的内联版本,所以我希望它是可以的。但是(ghc-7.6.2,也可以是ghc-7.4.1)

代码语言:javascript
复制
Could not deduce (f ~ f1)
from the context (b1 ~ f a1, b ~ f b2, Functor f)
  bound by a pattern with constructor
             FMap :: forall (f :: * -> *) a b.
                     Functor f =>
                     (a -> b) -> Foo (f a) (f b),
           in an equation for \`asFunction'
  ...

为甚麽会出现这种情况,为何其他条文却不这样做呢?在更复杂的应用程序中,应该做些什么来防止这种麻烦呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-24 03:07:45

这可能与矫顽力的左/右分解有关,该特征被暂时从GHC的类型推理系统中删除,以便支持更灵活的(“不饱和”)类型函数,然后是当它被发现有像这样令人讨厌的效果时重新引入

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

https://stackoverflow.com/questions/23229210

复制
相关文章

相似问题

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