'idiomatische' Haskell-Ungleichung

(bearbeitet von der vorherigen Frage, wo ich dachte, dass der Code unten nicht funktioniert)

Ich möchte eine haskell-Funktion f implementieren, die eine Einschränkung hat, so dass ihre 2 Parameter nicht den gleichen Typ haben dürfen. Ich habe den folgenden Code verwendet:

{-# 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 = ()

Jetzt akzeptiert die Funktion g nur a und b, wenn sie unterschiedliche Typen haben. Ist dies der 'idiomiatische' Weg, um die Typungleichheit in haskell zu codieren? Wenn nicht, was sind die Probleme damit?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage