Conflitto di dipendenza funzionale di Haskell
-
02-11-2019 - |
Domanda
Perché questo deriva in un conflitto?
class Foo a b | b -> a where
foo :: a -> b -> Bool
instance Eq a => Foo a a where
foo = (==)
instance Eq a => Foo a (a -> a) where
foo x f = f x == x
Si noti che il codice si compilerà se rimuovo la dipendenza funzionale.
Avevo l'impressione che le dipendenze funzionali dovessero non consentire cose come le seguenti, quando in realtà, si compila!
class Foo a b | b -> a where
foo :: a -> b -> Bool
instance Eq a => Foo a a where
foo = (==)
instance Eq a => Foo Bool a where
foo _ x = x == x
Stesso b
parametro, ma diverso a
parametri. Non dovrebbe b -> a
non consentire questo, come significa a
è determinato in modo univoco da b
?
Nessuna soluzione corretta
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow