smash

Smash products, wedge products, and pointed products

https://github.com/emilypi/smash

Version on this page:0.1.2@rev:1
LTS Haskell 19.18:0.1.3
Stackage Nightly 2022-03-17:0.1.2@rev:1
Latest on Hackage:0.1.3

See all snapshots smash appears in

BSD-3-Clause licensed by Emily Pillmore
Maintained by emilypi@cohomolo.gy
This version can be pinned in stack with:smash-0.1.2@sha256:de7ac7df5affa36f1c42aef8286f1827202fa1e3ea8ae15d396085603f51ab44,1373

Module documentation for 0.1.2

smash: Combinators for Maybe types

Build Status Hackage

This package consists of 3 interesting datatypes and their respective monad transformers:

  • Wedge: Isomorphic to Maybe (Either a b). The Wedge datatype represents the coproduct in the category Hask* of pointed Hask types, called a wedge sum. One can derive this type as follows:

    Either (Maybe a) (Maybe b)
    ~ (1 + a) + (1 + b)
    -- units are the same via pushout
    ~ 1 + a + b
    ~ Maybe (Either a b)
    ~ Wedge a b
    
  • Can: Isomorphic to Maybe (These a b). The Can datatype represents the product in Hask*. One can derive this as follows:

    (Maybe a, Maybe a)
    ~ (1 + a) * (1 + b)
    -- products distribute over coproducts
    ~ 1 + b + a + a*b
    -- coproducts are associative
    ~ 1 + (b + a + a*b)
    ~ 1 + These a b
    ~ Maybe (These a b)
    ~ Can a b
    
  • Smash: Isomorphic to Maybe (a,b). The Smash datatype represents a special type of product, a smash product, in the category Hask*. The smash product is a symmetric, monoidal tensor in Hask* that is the quotient of Can over Wedge. It can be derived as follows:

    Can a b / Wedge a b
    ~ 1 + a + b + a*b / 1 + a + b
    -- reassoc coproduct
    ~ (1 + a + b) + a*b / 1 + a + b
    -- def. of quotient: (1 + a + b) ~ 1
    ~ 1 + a * b
    ~ Maybe (a,b)
    ~ Smash a b
    

Changes

Revision history for possibly-can

0.1.2

  • Add Monad Transformers for Can, Wedge, and Smash (#25)
  • Add Safe haskell pragmas
  • Add instances for all functor classes.
  • Add instances for MonadZip
  • Add nice pointfree definitions for some functions (#24, thanks @subttle!)
  • Add unfolds to the Api.
  • Add template haskell Lift instance (#20, thanks @gergoerdi!)
  • Fixes for various haddock problems (thank you @lemastero and @L7R7!)
  • Bump base to exclude 8.2.x

0.1.1

  • Add NFData, Binary instances
  • CPP to extend to 8.2.2 without warnings

0.1.0.0

  • First version. Released on an unsuspecting world.