BSD-3-Clause licensed by Emily Pillmore
Maintained by

Module documentation for

This version can be pinned in stack with:smash-,1583

smash: Combinators for Maybe types

Build Status Hackage

This package consists of 3 datatypes: Wedge, Can, and Smash.

You can imagine these three types as Maybe (Either a b), Maybe (Either a (Either b (a,b)), and Maybe (These a b) respectively. It turns out that that each of these datatypes has spcial properties:

  • the Wedge datatype represents the coproduct (like, Either) in the category Hask* of pointed Hask types, called a wedge sum. One can derive this by noting that units are the same in Haskell, and the sum of two pointed types is (1 + a) + (1 + b) ~ 1 + a + b ~ Wedge a b.

  • the Can datatype represents the product (like, (,)) in Hask*. You can derive this by considering the product of two pointed types (1 + a) * (1 + b) ~ 1 + a + b + a*b ~ Can 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 plays nicely with the product, ‘Can’, and coproduct, ‘Wedge’.

Pictorially, these datatypes look like this:

Non +---+---+ (a,b)

Nowhere +-------+


Nada +--------+ (a,b)


Revision history for possibly-can


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

  • First version. Released on an unsuspecting world.
Used by 4 packages in nightly-2020-09-16(full list with versions):