zoukankan      html  css  js  c++  java
  • [Functional Programming 101] runWIth, evalWith, execWith

    Recentlly, I am learning crocks.js ADT libaray. In the beginning, it is hard to understand when to use 'runWith', 'evalWith', 'execWith'. Until I went though the course a thrid times... I finally have some feelings for it.

    State has 'get, put, modify' methods for use, and you can build them by yourself as well:

    // getState :: () -> State s
    const getState = () => State(s => Pair(s, s))
    
    //putState :: s -> State s ()
    const putState = state => State(() => Pair(Unit(), state));
    
    // modifyState :: (s -> s) -> State s ()
    const modifyState = fn => State(s => Pair(Unit(), fn(s)));

    As well can see, for those methods, they are all using 'Pair'.

    Pair(a, s):

    On the left part of Pair, is 'a': stand for variable; On the right part of Pair, 's' is the State.

    Now rules for using 'runWith', 'evalWith', 'execWith':

    1. If you want to get result as Pair(a, s), you should use 'runWith':

    const bubble = {
        bubbles: 40
    };
    const add = x => y => x+ y;
    console.log(
        modify(mapProps({bubbles: add(1)}))
            .runWith(bubble) // Pair( (), { bubbles: 41 } )
    )

    2. If you only instreaded in the variable 'a', you should use 'evalWith':

    const bubble = {
        bubbles: 40
    };
    const add = x => y => x+ y;
    console.log(
        modify(mapProps({bubbles: add(1)}))
            .evalWith(bubble) // () Unit
    )

    3. If you instested in State, which is on the right part of Pair, you should use 'execWith':

    const bubble = {
        bubbles: 40
    };
    const add = x => y => x+ y;
    console.log(
        modify(mapProps({bubbles: add(1)}))
            .execWith(bubble) // { bubbles: 41 }
    )
  • 相关阅读:
    汉诺塔问题
    两个有序链表序列的合并
    数列求和
    求集合数据的均方差
    [NOIP2014] 提高组 洛谷P1328 生活大爆炸版石头剪刀布
    [NOIP2014] 普及组
    洛谷P1726 上白泽慧音
    洛谷P1808 单词分类
    洛谷P1889 士兵站队
    洛谷P1288 取数游戏II
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10334960.html
Copyright © 2011-2022 走看看