# smash

Combinators for Maybe types

https://github.com/emilypi/smash

 LTS Haskell 19.33: 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

Maintained by
This version can be pinned in stack with:`smash-0.1.3@sha256:e812275cad1fac9d6f8a479f08c1622ae5e694506883c75e26f4c93895bebca8,1351`

#### Module documentation for 0.1.3

• Control
• Data
Depends on 7 packages(full list with versions):
Used by 1 package in lts-19.25(full list with versions):

# smash: Combinators for Maybe types

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
``````

# Revision history for smash

## 0.1.3 – 2022-04-03

• Update `base` bounds to allow GHC 9.2.x

## 0.1.2

• Add Monad Transformers for `Can`, `Wedge`, and `Smash` (#25)
• 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.