zoukankan      html  css  js  c++  java
  • [Compose] Isomorphisms and round trip data transformations

    What is Isomorphisms?
    We have a value x, then apply function 'to' and 'from' to value 'x', the result we should still get 'x'.

    // from(to(x)) == x
    // to(from(y)) == y

    So Isomorphisms is kind of opreation able to tranform a value back and forward without lose anything.

    Example1:

    const Iso = (to, from) => ({
      to,
      from
    }) 
    
    // String <-> [Chat]
    const StoC = Iso(
      (str) => str.split(''),
      (chat) => chat.join('')
    );
    
    const res = StoC.from(StoC.to('How'));

    Example2: 

    // String <-> [Chat]
    const StoC = Iso(
      (str) => str.split(''),
      (chat) => chat.join('')
    );
    
    const truncate = (str, num) => StoC.from(StoC.to(str).slice(0,num)).concat('...');
    let res = truncate("Hello World!", 7);
    console.log(res); // "Hello W..."

    Example3:

    const Iso = (to, from) => ({
      to,
      from
    }) 
    
    // [a] <-> Either/null/a
    const singleton = Iso(
      (either) => either.fold(() => [], x => [x]),
      ([x]) => x? Right(x): Left()
    )
    
    const filterEither = (e, pred) => singleton.from(singleton.to(e).filter(pred));
    const res = filterEither(Right('hello'), (x) => x.match(/h/ig))
                    .map(x => x.toUpperCase());
  • 相关阅读:
    sudo配置临时取得root权限
    Linux 前台 和 后台进程 说明
    延迟加载
    事件代理
    字符串方法总结
    javascript
    HTML
    通用样式,如清除浮动
    html脱离文档流事件
    经典容易忽略的行内块
  • 原文地址:https://www.cnblogs.com/Answer1215/p/6344185.html
Copyright © 2011-2022 走看看