java,monad
<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
java monad是什麼,讓我們一起了解一下?
Monad是一個代碼名字,意思是單子代表Windows上的一個新的交互式命令行工具以及面向對象的腳本技術。Monad也被稱爲MSH,是下一代的Windows命令shell,用全新的角度來完成各式各樣的管理任務。
Monad定義的要素有哪些?
在定義 Monad 時需要提供一個類型構造器 M 和兩個操作 unit 和 bind:
1、類型構造器的作用是從底層的類型中創建出一元類型(monadic type)。如果 M 是 Monad 的名稱,而 t 是數據類型,則 M t 是對應的一元類型。
2、unit 操作把一個普通值 t 通過類型構造器封裝在一個容器中,所產生的值的類型是 M t。unit 操作也稱爲 return 操作。return 操作的名稱來源於 Haskell。不過由於 return 在很多編程語言中是保留關鍵詞,用 unit 做名稱更爲合適。
3、bind 操作的類型聲明是 (M t)→(t→M u)→(M u)。該操作接受類型爲 M t 的值和類型爲 t → M u 的函數來對值進行轉換。在進行轉換時,bind 操作把原始值從容器中抽取出來,再應用給定的函數進行轉換。函數的返回值是一個新的容器值 M u,M u 可以作爲下一次轉換的起點。多個 bind 操作可以級聯起來,形成處理流水線。
具體代碼示例如下:
public class LoggingMonad { private final T value; private final List logs; public LoggingMonad(T value, List logs) { this.value = value; this.logs = logs; } @Override public String toString() { return "LoggingMonad{" + "value=" + value + ", logs=" + logs + '}'; } public static LoggingMonad unit(T value) { return new LoggingMonad<>(value, List.of()); } public static LoggingMonad bind(LoggingMonad input, Function<T1, LoggingMonad> transform) { final LoggingMonad result = transform.apply(input.value); List logs = new ArrayList<>(input.logs); logs.addAll(result.logs); return new LoggingMonad<>(result.value, logs); } public static LoggingMonad pipeline(LoggingMonad monad, List<Function<T, LoggingMonad>> transforms) { LoggingMonad result = monad; for (Function<T, LoggingMonad> transform : transforms) { result = bind(result, transform); } return result; } public static void main(String[] args) { Function<Integer, LoggingMonad> transform1 = v -> new LoggingMonad<>(v * 4, List.of(v + " * 4")); Function<Integer, LoggingMonad> transform2 = v -> new LoggingMonad<>(v / 2, List.of(v + " / 2")); final LoggingMonad result = pipeline(LoggingMonad.unit(8), List.of(transform1, transform2)); System.out.println(result); // 輸出爲 LoggingMonad{value=16, logs=[8 * 4, 32 / 2]} }}
-
新筆記本電腦第一次充電要多久,筆記本電腦充電時間
1、第一次先把筆記本電池中的電完全用完,然後關機充電12個小時以上,最好14個小時左右。2、只有第一次充電需要衝的時間長,以後每次都是充滿即可,現在的筆記本都是有完善的電源管理電路和充電管理體系,充電時間過長,這樣會導致充電時熱量過高,會引起爆炸等現象。3、如...
-
吃菠蘿什麼好處
菠蘿是一種熱帶水果,從十六世紀末傳入中國以來,因爲吃起來酸甜可口,成爲備受人們喜愛的熱帶水果之一,也因此在中國南方,氣候適宜的地方得到普遍的栽培,中國也是世界十大菠蘿產國之一。在生活中有人可能分不清菠蘿和鳳梨的區別,從生物學上來說,這倆是同一種水果,但是在商...
-
樂視視頻開通會員怎麼開
開通樂視視頻會員的途徑很簡單,在官網註冊賬號選擇開通的會員類型,點擊支付即可。也可以通過手機裏面的樂視視頻APP開通會員,先註冊或者登錄已有賬號,選擇右下角的未登錄,點進去可以選擇開通會員。首先,打開樂視視頻軟件,進入主頁面後,選擇右下角的“未登錄”,再“點擊...
-
微博如何移動好友分組
1、進入個人微博,點擊主頁裏的“關注”。或者從首頁裏邊的“關注”進入也是可以的。2、進入關注列表後自動顯示爲查看其他分組,這個時候你可以看到“批量管理”和“排序”兩個選項,你可以進行初步排序管理。3、單擊“查看其他分組”,裏面有你微博裏所有的分組,我們...