'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?