第25章:單子變換的升格操作
- 單子變換就是一類函式,用來把單子m包裹成單子t m,同時宣告在這種情況下對應的單子例項。
- 實際當中,我們常遇到多個單子變換疊加的情況,分析單子變換的型別時,按順序來看
- 我們把通過疊加單子變換得到的單子叫單子棧 monad stack
- 問題是:當單子變換的層級變深時,lift操作開始變得麻煩,當我們增加、刪除單子變換型別時,所有的lift都要做相應的改變
1. MonadIO
- transformers函式庫提供的MonadIO型別類來自動升格IO操作
liftIO函式把IO操作升格到MonadIO範疇
class Monad m => MonadIO m where liftIO :: IO a -> m a instance MonadIO IO where liftIO = id instance (MonadIO m) => MonadIO (StateT s m) where liftIO = lift . liftIO ...
2. MonadState和MonadReader
- mtl函式庫中,每一個單子變換都有對應的型別類來方便使用
MonadState和MonadReader用來定義對應單子型別的一些通用操作
--Control.Monad.Reader.Class class Monad m => MonadReader r m | m -> r where ask :: m r local :: (r -> r) -> m a -> m a reader :: (r -> a) -> m a instance MonadReader r ((->) r) where ask = id local f m = m . f reader = id --Control.Monad.State.Class class Monad m => MonadState s m | m -> s where --m必須是單子,|後的m -> s表示型別依賴,型別變數s取決於型別變數m get :: m s put :: s -> m () state :: (s -> (a, s)) -> m a
3.型別家族 TypeFamilies
- 型別依賴並不是唯一能描述上述型別關係的工具
- 型別家族定義了一個滿足某些條件的型別的集合
- 在宣告型別類時提供型別類方法定義需要的型別別名——關聯型別別名
- 單子變換函式庫monads-tf
4. Lazy StateT 和 Strict StateT
- 區別,單子例項宣告中的細微差別
5. Writer單子
- 常用來構造連續的資料
不解的地方甚多,還不知道怎麼用,先把後面的看完吧
相關文章
- 解剖 RxJava 之變換操作符RxJava
- RxJava2.0——變換操作符RxJava
- mORMot 1.18 第07章 簡單的讀寫操作ORM
- 執行計劃-5:第一個子操作的變化
- RxJava 學習筆記 -- 變換操作符RxJava筆記
- windows下node更換版本(簡單操作)Windows
- 【數理知識】第1章-傅立葉變換-《積分變換與場論》王振
- 褲子換裙子,就問你GAN的這波操作秀不秀
- 單一div的正多邊形變換(純CSS)CSS
- 【一葉一世界,換維升格局】技術創業的對資本的態度創業
- 仿射變換及其變換矩陣的理解矩陣
- RxJava 原始碼分析系列(四) -操作符變換原理RxJava原始碼
- DG的切換操作
- 簡單的量子演算法(一):Hadamard 變換、Parity Problem演算法
- pdf轉換成ppt,這樣操作很簡單
- ReactiveCocoa 中 RACSignal 所有變換操作底層實現分析(下)React
- ReactiveCocoa 中 RACSignal 所有變換操作底層實現分析(上)React
- 空間向量變換,以及OpenGL的glm庫簡單應用
- 小波變換與傅立葉變換的區別
- Premiere Pro CC之視訊升格降格(六)REM
- Rxjava 2.x 原始碼系列 - 變換操作符 Map(上)RxJava原始碼
- Slate文件編輯器-WrapNode資料結構與操作變換資料結構
- 直播平臺開發,Android端簡單的顏色背景變換Android
- 陣列的操作-變形陣列
- Avdshare Video Converter,讓影片轉換變得更簡單!IDE
- z 變換
- Hough變換
- Python實用技法第1篇:可迭代物件分解為單獨的變數Python物件變數
- z變換與s變換之間的轉換(一些零碎且不嚴謹的想法)
- LeetCode 1626. 無矛盾的最佳球隊---【動態規劃】最長上升子序列變換版-->最大上升子序列和LeetCode動態規劃
- 第 3 節:變數變數
- 【OpenCV-Python】:影像的傅立葉變換與逆傅立葉變換OpenCVPython
- OpenCV計算機視覺學習(3)——影像灰度線性變換與非線性變換(對數變換,伽馬變換)OpenCV計算機視覺
- Python 類變動的鉤子方法Python
- Z變換(2020.10.21)
- 頻域變換
- MyBatis 的簡單 CRUD 操作MyBatis
- win10開始選單怎麼切換風格_win10開始選單樣式切換如何操作Win10
- Java 第9 章 : 資料表與簡單Java類對映轉換Java