Was ist die Motivation für funktionale Abhängigkeiten in Haskell?Motivation der funktionalen Abhängigkeiten
Ein Beispiel für eine funktionale Abhängigkeit:
class (Monad m) => MonadSupply s m | m -> s where
next :: m (Maybe s)
Es ist in dem RWH Buch angegeben, dass funktionale Abhängigkeit hilft, den Typ-Checker. Wie hilft es eigentlich?
Auch dieses Stück Code kompiliert tatsächlich:
class (Monad m) => MonadSupply s m where
next :: m (Maybe s)
Aber ich denke, es wird ein Laufzeitfehler erzeugen.
Ich kann nicht verstehen, wie 'Für m, gibt es genau 1 s'. Wenn wir sagen, für 'm' gibt es genau ein' s', dann warum schreiben Sie sie nicht als 'MonadSupply m m'? (Ich weiß, dass ich verrückt bin :)) – Sibi
@Sibi Da 's' normalerweise anders ist, zum Beispiel mit' MonadState', haben wir 'StateT s' und' s', klar für alle 'StateT's wir wirklich will nur 's' benutzen. – jozefg
Jede gegebene "Versorgungs-Monade" liefert normalerweise nur einen Typ! Wenn Sie zum Beispiel 'm = MySpecialSupplyMonad s' haben, die Werte vom Typ' s' liefern, dann wissen Sie vom Typ "MySpecialSupplyMonad s'" den Versorgungstyp, indem Sie einfach das Typargument "' s' "lesen. So kann gesagt werden, dass "s" funktional von "m" abhängt. –