9
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 s'。如果我們告訴,因爲'm'只有一個's',那麼爲什麼不把它們寫成'MonadSupply m m'? (我知道我聽起來很瘋狂:)) – Sibi
@Sibi因爲's'通常是不同的,例如'MonadState',我們有'StateT s'和's',很明顯我們所有的'StateT s'我們真的只是想用's'。 – jozefg
任何給定的「供應monad」通常只會提供一種類型!例如,如果你有'm = MySpecialSupplyMonad s'提供's'類型的值,那麼你可以通過讀取類型參數「's'」從類型「'MySpecialSupplyMonad s''」知道供應類型。因此's'可以說在功能上取決於'm'。 –