作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Wen使用函数依赖项时,我经常遇到Coverage Condition。可以使用UndecidableInstances
解除它,但我通常尝试远离该扩展名。
这是一个有些人为的示例,该示例无需UndecidableInstances
即可工作:
{-# Language MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances #-}
data Result = Result String
deriving (Eq, Show)
data Arguments a b = Arguments a b
class Applyable a b | a -> b where
apply :: a -> b -> Result
instance Applyable (Arguments a b) (a -> b -> Result) where
(Arguments a b) `apply` f = f a b
UndecidableInstances
):
{-# Language MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances, UndecidableInstances #-}
data Result a = Result a
deriving (Eq, Show)
data Arguments a b = Arguments a b
class Applyable a b c | a -> b c where
apply :: a -> b -> Result c
instance Applyable (Arguments a b) (a -> b -> Result c) c where
(Arguments a b) `apply` f = f a b
b
和
c
都由
a
决定,所以更通用的代码应该不会引起任何问题,所以我的问题是:
UndecidableInstances
是否存在任何问题UndecidableInstances
(也许有类型族的情况下)的情况下为上述情况建模?最佳答案
没有什么理由远离UndecidableInstances
。可能发生的最坏情况是类型检查器开始循环(我想告诉您有关情况)。您可以使覆盖条件变得越来越聪明,但是它永远不会做您想做的所有事情,因为这是不确定的。
关于haskell - 如何在不使用-XUndecidableInstances的情况下解决功能依赖项的覆盖条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9076179/
我是一名优秀的程序员,十分优秀!