制定一个可能的约束方程式

时间:2016-12-13 00:06:09

标签: haskell

我怎样才能约束到Eq a?它需要是善良的* - >约束

我尝试了什么:

class (a ~ Maybe b, Eq b) => K a where
instance (a ~ Maybe b, Eq b) => K a where

错误:

Not in scope: type variable ‘b’

示例用法:

data Test c = forall a. (c a) => Test a
r :: Test K -> Maybe Bool
r (Test o) = (==) <$> o <*> o -- I need GHC to infer that o is Maybe Eq

有效的案例:

pp :: Test ((~) String) -> String
pp (Test o) = o ++ "X" -- GHC infers that o is a string

hh :: Test Eq -> Bool
hh (Test o) = o == o -- GHC infers that o is Eq

这里的通用答案:Is there a general way to apply constraints to a type application?

2 个答案:

答案 0 :(得分:9)

以下编译在我的机器上。不知道它是多么明智。

$scope.saveEntry = function (idx) {
    console.log("Saving entry");
    $scope.template.editableTable[idx] = angular.copy($scope.model.selected);
    $scope.reset();
};

答案 1 :(得分:7)

这是known issue。 GHC正在窒息,因为你引入了一个新的类型变量refs,在实例头中的任何其他位置都没有提到。一种解决方法是使用类型族和约束种类。

refs