java monad

作者:原创时间:2022-04-06
文档

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 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> transforms) {
 LoggingMonad result = monad;
 for (Function transform : transforms) {
 result = bind(result, transform);
 }
 return result;
 }
 
 public static void main(String[] args) {
 Function transform1 =
 v -> new LoggingMonad<>(v * 4, List.of(v + " * 4"));
 Function 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]}
 }
}

以上就是小编今天的分享了,希望可以帮助到大家。

显示全文
java mono java mqtt java multiset java mvvm java mybatisplus java namespace java newinstance java nextint java nextline java nexus java nfs java geotools java getbytes java hashcode java hdfs java node类 java notify java nslookup java number java hibernate java module java modelandview java mockito java mmap java mkdir java mina java mian java method java merge java memcpy java matrix java matlab java math.ceil java mapping java malloc java main java logstash java logging java localtime java locale