zoukankan      html  css  js  c++  java
  • [Functional Programming Monad] Combine Stateful Computations Using A State Monad

    The true power of the State ADT really shows when we start combining our discrete, stateful transactions. We start looking at another construction helper named of, used to lift any given value of any type into the resultant. We also explore another instance method called chain that is used for combining our simple, discrete transactions into more complex flows that can be extended to meet our needs as they arise. To create a set of stateful transactions to be combined, we see how the get and modify construction helpers can be used to make simple, easy to read code.

    const { constant, Pair, Unit, curry, objOf, compose, State, mapProps, prop, option } = require("crocks");
    
    const { put, get, modify } = State;
    
    
    const add = x => y => x+y;
    const inc = add(1);
    
    // State s a -> State(x => Pair(a, x))
    
    // 'get' return result apply to variable a
    const addState = n => 
        get(add(n))
    
    const incState = n => 
        modify(inc) // modify return Unit() in variable position, Pair( (), 3 )
        .map(constant(n)) // to keep the vairable a, we can use constant to wrap a value into function, Pair( 12, 3 )
    
    const compute = n => 
        State.of(n)
            .chain(addState)
            .chain(incState)
    
    
     console.log(
         compute(10)
            .runWith(2)
     )       
  • 相关阅读:
    注解
    反射机制
    语法糖
    线程安全与锁优化
    java语法糖 之 泛型
    虚拟机字节码执行引擎
    虚拟机的类加载机制
    性能监控之可视化故障处理工具 Visualvm
    性能监控之可视化故障处理工具 JConsole
    Node of C++ Linker.
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10338745.html
Copyright © 2011-2022 走看看