From HaskellWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Hint: if you're just looking for an introduction to partible types, see Plainly partible.

The Partible class

Partible types have an common (and austere) programming interface, this being captured by the Partible class:

module Partible where

class Partible a where
    part :: a -> (a, a)
    parts :: a -> [a]

     -- Minimal complete definition: part or parts --
    part u = case parts u of u1:u2:_ -> (u1, u2)
    parts u = case part u of (u1, u2) -> u1 : parts u2

In addition to implementing the methods of the class, partible types should satisfy certain equations; for an explanation of them along with why they should be satisfied, see Partible laws.