在頁http://www.haskell.org/haskellwiki/Pointfree#Tool_support,它談到了(->) a
單子。什麼是Haskell`( - >)a` monad?
什麼是這個monad?使用符號使得谷歌很難。
在頁http://www.haskell.org/haskellwiki/Pointfree#Tool_support,它談到了(->) a
單子。什麼是Haskell`( - >)a` monad?
什麼是這個monad?使用符號使得谷歌很難。
這是一個Reader monad。你可以把它看作
type Reader r = (->) r -- Reader r a == (->) r a == r -> a
instance Monad (Reader r) where
return a = const a
m >>= f = \r -> f (m r) r
,做計算,如:
double :: Num r => Reader r r
double = do
v <- id
return (2*v)
使用案例:您可以使用它來爲代碼提供配置文件。或者在某些類型的跳棋中,跟蹤環境 – jozefg
它是功能單子,這是一個有點怪異理解。順便說一下,它有時也被稱爲Reader monad。我想說明它是如何工作的最好方法是通過一個例子:
f1 :: Double -> Double
f1 x = 10 * x + x ** 2 + 3 * x ** 3
f2 :: Double -> Double
f2 = do
x1 <- (10 *)
x2 <- (** 2)
x3 <- (** 3)
return $ x1 + x2 + 3 * x3
如果你嘗試了這兩個,你會看到你從雙方得到的結果相同。那麼究竟發生了什麼?當你從一個函數中「提取」一個值時,你會得到可以被認爲是它的「返回值」的東西。我在其中加了引號,因爲當你從這個monad中得到一個值return
時,你返回的值是一個函數。
對於這樣的示例,f2
的隱式參數作爲隱式參數傳遞給每個<-
。如果您有許多具有相同參數的子表達式,它會非常有用。作爲Reader monad,它通常用於提供只讀配置值。
你可以稱它爲_function monad_的單詞或_reader monad_(雖然通常指的是[明確命名的等價物](http://hackage.haskell.org/package/mtl-2.1.2/docs/Control -Monad-Reader.html))。 – leftaroundabout
http://learnyouahaskell.com/a-fistful-of-monads#the-monad-type-class – wit