zoukankan      html  css  js  c++  java
  • [Javascript Crocks] Recover from a Nothing with the `coalesce` Method

    The alt method allows us to recover from a nothing with a default Maybe, but sometimes our recovery efforts might need to enlist some logic to recover properly. In this lesson, we’ll see how we can use the coalesce method on the Maybe to recover from a Nothing by calling a function.

    When one would like to option a Maybe but would like to remain within a Maybe type, coalesce can be used. coalesce expects (2) functions for it's inputs.

    The first function is used when invoked on a Nothing and will return a Justinstance wrapping the result of the function. The second function is used when coalesce is invoked on a Just and is used to map the original value, returning a new Just instance wrapping the result of the second function.

    Difference between 'coalesce' & 'alt' is that: 

     'alt' returns just a hardcoded value;

     'coalesce' is more dynamice, based on some condition, you can return different values.

    The use case of 'coalesce' is similar to 'alt', but instead wrting two function as 'alt' does:

    const getArticleName = obj => prop('name', obj)
        .chain(safe(isNonEmptyString)) // If return Nothing then use alt value
        .alt(Maybe.of('page not found'));
    
    const getArticleUrl = obj => getArticleName(obj)
        .map(createUrlFromName)
        .option('default');
    
    const url = getArticleUrl(article);

    In 'coalesce', we just combine in one single function:

    const getArticleUrl = obj => prop('name', obj)
        .chain(safe(isNonEmptyString)) // If return Nothing then use first function of coalesce
        .coalesce(() => 'page not found', createUrlFromName)
        .option('default');
    
    const url = getArticleUrl(article);
    const crocks = require('crocks')
    const { identity ,and, compose, isEmpty, isString, Maybe, not, prop, safe } = crocks
    const { join, split, toLower } = require('ramda')
    
    
    const article = {
        id: 1,
        _name: 'Learning crocksjs functional programming library'
    };
    
    const createUrlSlug = compose(join('-'), split(' '), toLower);
    const createUrl = slug => `https://egghead.io/articles/${slug}`;
    const createUrlFromName = compose(createUrl, createUrlSlug);
    const isNonEmptyString = and(not(isEmpty), isString);
    
    
    const getArticleUrl = obj => prop('name', obj)
        .chain(safe(isNonEmptyString)) // If return Nothing then use first function of coalesce
        .coalesce(() => 'page not found', createUrlFromName)
        .option('default');
    
    const url = getArticleUrl(article);
    
    console.log(url)
  • 相关阅读:
    iDirect IQ200 Evolution Option Config
    直播卫星接收设备参数
    QCA9531方案双通道嵌入式无线AP模块应用选型参考
    FanControl 机箱风扇控制软件
    硬盘基本知识(磁头、磁道、扇区、柱面)
    Registry keys for configuring Automatic Updates & WSUS
    CentOS6.5下简单的MySQL数据库操作
    临时搞两天VC,在VC里如何获取当前程序的名字和路径以及如何分割字符串
    COBOL中USAGE的用法
    sqlplus 帮助无法显示问题的解决
  • 原文地址:https://www.cnblogs.com/Answer1215/p/9037633.html
Copyright © 2011-2022 走看看