gpt4 book ai didi

haskell - 如何在不使用-XUndecidableInstances的情况下解决功能依赖项的覆盖条件

转载 作者:行者123 更新时间:2023-12-04 18:13:04 24 4
gpt4 key购买 nike

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

当我使结果类型更通用时,Coverage Condition失败(因此需要 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

我以为,因为 bc都由 a决定,所以更通用的代码应该不会引起任何问题,所以我的问题是:
  • 在这里使用UndecidableInstances是否存在任何问题
  • 是否可以在不依赖UndecidableInstances(也许有类型族的情况下)的情况下为上述情况建模?
  • 最佳答案

    没有什么理由远离UndecidableInstances。可能发生的最坏情况是类型检查器开始循环(我想告诉您有关情况)。您可以使覆盖条件变得越来越聪明,但是它永远不会做您想做的所有事情,因为这是不确定的。

    关于haskell - 如何在不使用-XUndecidableInstances的情况下解决功能依赖项的覆盖条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9076179/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com