我在閱讀Purescript通過示例並介紹了讀者單元的部分。示例如下: createUser :: Reader Permissions (Maybe User)
createUser = do
permissions <- ask
if hasPermission "admin" permissions
then map Just newUser
els
對環境共享加上確定性的規範「Monad的實例」如下(使用僞哈斯克爾,因爲Haskell的Data.Set當然不是的,一元): eta :: a -> r -> {a} -- '{a}' means the type of a set of a's
eta x = \r -> {x}
bind :: (r -> {a}) -> (a -> r -> {b}) -> r -> {b}
m `b
在學習讀者單子,我發現它的定義是:如元組 newtype Reader r a = Reader { runReader :: r -> a }
instance Monad (Reader r) where
return a = Reader $ \_ -> a
m >>= k = Reader $ \r -> runReader (k (runReader m r))