@higherkinded/bottom
TypeScript icon, indicating that this package has built-in type declarations

1.1.0 • Public • Published

Bottom

Check out on NPM Check out on NPM License Typedefs JS Support

A set of easily pluggable and extremely touchy empty definitions.

Naming

The name is ripped off the Haskell community's term for undefined. The idea partially comes from there as well — a polymorphic value that can be put anyplace to signify unimplemented functionality.

Motivation

I've had a lot of situations where I had to implement some large module and had to write the bottom function myself just to plug something in place of implementation for some time. What was also quite important to it is to fend off any accidental uses by causing the bottom to throw exceptions. Being tired of rewriting this multiple time and, surprisingly, seeing no alternative implementations (at all), I've written this library. It covers use cases of both TypeScript bottom-related needs and JavaScript bottom-related needs.

How do I?

So how to use it? In case of TypeScript functions, it will be...

import { bottom, bottomFn } from 'bottom';


// ...like this:
const product: (...args: number[]) => number = bottom;


// Or like this:
const someComplexProcedure = <A, B, C, R>(a: A, b: B, c: C): R => {
  /* 
    ...
    
    Some partial implementation here
    
    ...
  */
  
  return bottom();
};


// Or perhaps you want to carry the name?
const namedFunction: <A, R>(a: A): R = bottomFn('namedFunction');


// Also OK in return statement:
const someNamedProcedure = <A, B, C, R>(a: A, b: B, c: C): R => {
  /* 
    ...
    
    Some partial implementation here
    
    ...
  */
  
  return bottomFn('someNamedProcedure')();
};

For classes, you have these options:

import { Bottom, bottomMethod } from 'bottom';

// Declared but unimplemented and uninstantiable class
class Foo extends Bottom {

  /* Bottom-ed method of a class, carrying the info about who they are and who
     owns them. */
  static someMethod = bottomMethod('someMethod', 'Foo');

}

Dependencies (0)

    Dev Dependencies (9)

    Package Sidebar

    Install

    npm i @higherkinded/bottom

    Weekly Downloads

    0

    Version

    1.1.0

    License

    BSD-3-Clause

    Unpacked Size

    18.6 kB

    Total Files

    6

    Last publish

    Collaborators

    • higherkinded