Jaka jest motywacja posiadania zależności funkcjonalnych w Haskell?Motywacja posiadania zależności funkcjonalnych
Przykładem zależności funkcjonalnej:
class (Monad m) => MonadSupply s m | m -> s where
next :: m (Maybe s)
To jest zawarta w książce RWH, że zależność funkcjonalna pomaga sprawdzania typu. Jak to naprawdę pomaga?
Również ten kawałek kodu faktycznie kompiluje:
class (Monad m) => MonadSupply s m where
next :: m (Maybe s)
Ale myślę, będzie produkować błąd wykonania.
Nie mogę zrozumieć, w jaki sposób 'Dla m, istnieje dokładnie 1 s'. Jeśli powiemy, dla 'm' jest dokładnie jeden' s', to dlaczego nie zapisać ich jako 'MonadSupply m m'? (Wiem, że brzmi to szaleńczo :)) – Sibi
@Sibi Ponieważ 's' jest zwykle inny, na przykład z' MonadState', mamy 'StateT s' i' s', wyraźnie dla wszystkich 'StateT s' naprawdę po prostu chcę użyć 's'. – jozefg
Dowolna podana "monada zasilająca" będzie zazwyczaj dostarczać tylko jeden typ! Na przykład, jeśli masz 'm = MySpecialSupplyMonad s', który dostarcza wartości typu' s', to wiesz z typu "' MySpecialSupplyMonad s' "typ źródła po prostu czytając argument typu" 's'". Zatem 's' można powiedzieć, że funkcjonalnie zależy od' m'. –