Difference between revisions of "Partible"

From HaskellWiki
Jump to navigation Jump to search
(Initial content, loosely based on "Monad")
 
m (Minor changes to example code)
Line 6: Line 6:
   
 
<haskell>
 
<haskell>
  +
module Partible where
  +
 
class Partible a where
 
class Partible a where
part :: a -> (a, a)
+
part :: a -> (a, a)
parts :: a -> [a]
+
parts :: a -> [a]
   
-- minimal complete definition: part or parts --
+
-- Minimal complete definition: part or parts --
part u = case parts u of u1:u2:_ -> (u1, u2)
+
part u = case parts u of u1:u2:_ -> (u1, u2)
parts u = case part u of (u1, u2) -> u1 : parts u2
+
parts u = case part u of (u1, u2) -> u1 : parts u2
 
</haskell>
 
</haskell>
   

Revision as of 22:21, 16 April 2021

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.