(从上一个问题编辑,我认为下面的代码不起作用)
我希望实现一个 haskell 函数 f ,它有一个限制,使得它的 2 个参数不能具有相同的类型。我使用了以下代码:
{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, UndecidableInstances, FlexibleInstances, FlexibleContexts, TypeFamilies, IncoherentInstances #-}
data HTrue = HTrue
data HFalse = HFalse
class HEq x y b | x y -> b
instance (b ~ HTrue) => HEq x x b
instance (b ~ HFalse) => HEq x y b
g :: (HEq a b HFalse) => a -> b -> ()
g x y = ()
现在函数 g 只接受 a 和 b 如果它们具有不同的类型。这是在haskell中编码类型不平等的“惯用”方式吗?如果不是,它有什么问题?