我怎样才能约束到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?
答案 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