Sie konnte es wahrscheinlich mit -XRebindableSyntax
(obwohl Sie Daniel Wagner hören sollte und dies nicht tun):
{-# LANGUAGE RebindableSyntax #-}
module Test where
import qualified Prelude as P
class Decidable b where
toBool :: b -> P.Bool
instance Decidable P.Bool where
toBool = P.id
ifThenElse :: Decidable b => b -> a -> a -> a
ifThenElse b ifTrue ifFalse = case toBool b of
P.True -> ifTrue
P.False -> ifFalse
data Test = A | B deriving (P.Eq, P.Show)
instance Decidable Test where
toBool A = P.True
toBool B = P.False
Dann in GHCi:
> :l decidable.hs
> :set -XRebindableSyntax
> P.putStrLn (if A then "it worked!" else "it failed!")
it worked!
Auch dies nicht tun ! Gehen Sie einfach mit einer einfachen Funktion, es wird eine Menge Kopfschmerzen auf der ganzen Linie speichern und wird niemanden sonst verwirren, der Ihren Code liest, der nicht merkt, dass Sie die Syntax der Sprache geändert haben.
Vielen Dank! –