Какова мотивация наличия функциональных зависимостей в Haskell?Мотивация наличия функциональных зависимостей
Одним из примеров функциональной зависимости:
class (Monad m) => MonadSupply s m | m -> s where
next :: m (Maybe s)
Об этом говорится в книге RWH, что функциональная зависимость помогает проверки типов. Как это на самом деле помогает?
Кроме того, этот кусок кода на самом деле составляет:
class (Monad m) => MonadSupply s m where
next :: m (Maybe s)
Но я думаю, это приведет к ошибке во время выполнения.
Я не могу понять, как «Для m существует ровно 1 с». Если мы скажем, что для 'm' существует ровно один' '', то почему бы не написать их как 'MonadSupply m m'? (Я знаю, что я сумасшедший :)) – Sibi
@Sibi Поскольку '' 'обычно отличается, например, с' MonadState', мы имеем 'StateT s' и' s', явно для всех 'StateT s' мы действительно просто хочу использовать 's'. – jozefg
Любая «подающая монада» обычно будет поставлять только один тип! Например, если у вас есть 'm = MySpecialSupplyMonad s', который поставляет значения типа' s', то вы знаете из типа «MySpecialSupplyMonad s'» тип поставки, просто прочитав аргумент типа '' s'. Таким образом, 's' можно сказать, что функционально зависит от' m'. –