• [Javascript Crocks] Compose Functions for Reusability with the Maybe Type


    We can dot-chain our way to great success with an instance of Maybe, but there are probably cases where you need to apply the same series of transformations against different Maybes. In this lesson, we’ll look at some point-free versions of some common Maybe methods and see how we can compose them together to get a reusable function that can be applied to any Maybe instance.

    We are going to rewrite the following code by using function composion:

    const crocks = require('crocks');
    const {and, isString, Maybe, prop, safe, option, map, alt, chain} = crocks;
    const {not, isEmpty, compose, converge, join, split, toLower} = require('ramda');
    
    ///////////////UTILS/////////////////
    const joinKey = compose(join('_'),  split(' '), toLower);
    const isNotEmpty = compose(
        not,
        isEmpty
    )
    const isNonEmptyString = and(isNotEmpty, isString);
    /*const isNonEmptyString = R.converge(
        R.and,
        [
            isNotEmpty,
            isString
        ]
    );*/
    
    const createUrl = key =>`https://egghead.io/articles/${joinKey(key)}`;
    
    ////////////////MAIN////////////////
    
    const article = {
         id: 1,
         name: 'Learn FP with this one weird trick'
    };
    
    /*
    const getUrl = obj =>
        prop('name', obj) // Maybe(string)
            .chain(safe(isNonEmptyString)) // Maybe(string) --safe(isNonEmptyString)--> Maybe(Maybe(String)) --chain--> Maybe(String)
            .alt(Maybe.of('Nope')) // Nothing -> Just('Nope')
            .map(createUrl)
            .option('default');
      */
     
    const getSafeName = compose(
        chain(safe(isNonEmptyString)),
        prop('name')
    );
    const getUrlOrDefault = compose(
        option('Not valid URL'),
        map(createUrl)
    );
    const getUrl = compose(
        getUrlOrDefault,
        getSafeName
    );
    const getUrlOrNope = compose(
        getUrlOrDefault,
        alt(Maybe.of('Nope')),
        getSafeName
    ) 
    const res = getUrl(article);
    console.log(res);   
  • 相关阅读:
    RepositoryItemComboBox 用法1
    php 直接获取url参数赋值成变量。省去繁琐的获取参数,再一个个赋值
    什么是经验,就是解决问题的能力!!
    win7 上运行 php7 +
    win2008 server 多IP配置
    mysqlli 的基本用法
    PHP操作mongoDB 笔记
    关于PHP程序员技术职业生涯规划 转自 韩天锋
    linux 简单笔记
    ubantu 重启mysql
  • 原文地址:https://www.cnblogs.com/Answer1215/p/9037945.html
Copyright © 2020-2023  润新知