Qual è la motivazione di avere dipendenze funzionali in Haskell?Motivazione di avere dipendenze funzionali
Un esempio di una dipendenza funzionale:
class (Monad m) => MonadSupply s m | m -> s where
next :: m (Maybe s)
Si afferma nel libro RWH, che la dipendenza funzionale aiuta il tipo di controllo. In che modo aiuta davvero?
Inoltre, questo pezzo di codice in realtà compila:
class (Monad m) => MonadSupply s m where
next :: m (Maybe s)
Ma credo, che produrrà un errore di runtime.
Non riesco a capire come 'Per m, c'è esattamente 1 s'. Se diciamo, per 'm' c'è esattamente uno' s', allora perché non scriverli come 'MonadSupply m m'? (So che sto suonando pazzo :)) – Sibi
@Sibi Siccome 's' è di solito diverso, per esempio con' MonadState', abbiamo 'StateT s' e' s', chiaramente per tutti 'StateT s' siamo veramente voglio solo usare 's'. – jozefg
Un dato "rifornimento" tipicamente fornirà solo un tipo! Ad esempio se hai 'm = MySpecialSupplyMonad s' che fornisce valori di tipo' s', allora sai dal tipo "' MySpecialSupplyMonad s' "il tipo di fornitura semplicemente leggendo l'argomento type" 's'". Così si può dire che 's' dipende funzionalmente da' m'. –