# smash: Combinators for Maybe types

[ bsd3, data, library ] [ Propose Tags ]

Smash products are like the These datatype, only with a unit. You can think of this type as isomorphic to 'Maybe (These a b)'.

## Modules

[Index] [Quick Jump]

#### Maintainer's Corner

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.0.0, 0.1.1.0, 0.1.2, 0.1.3 CHANGELOG.md base (>=4.12 && <4.17), bifunctors (>=5.5 && <5.6), binary (>=0.8 && <0.9), deepseq (>=1.4 && <1.5), hashable (>=1.3 && <1.4), mtl, template-haskell (>=2.2 && <3.0) [details] BSD-3-Clause (c) 2020-2022 Emily Pillmore Emily Pillmore emilypi@cohomolo.gy Data https://github.com/emilypi/smash https://github.com/emilypi/smash/issues head: git clone https://github.com/emilypi/smash.git by topos at 2022-04-27T00:57:59Z LTSHaskell:0.1.3, NixOS:0.1.3 679 total (11 in the last 30 days) (no votes yet) [estimated by Bayesian average] λ λ λ Docs available Last success reported on 2022-04-27

[back to package description]

# 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