unfoldable-0.6.0.1: Class of data structures that can be unfolded.

Portabilitynon-portable
Stabilityexperimental
Maintainersjoerd@w3future.com
Safe HaskellSafe-Infered

Data.Triunfoldable

Contents

Description

Class of data structures with 3 type arguments that can be unfolded.

Synopsis

Triunfoldable

class Triunfoldable t whereSource

Data structures with 3 type arguments (kind * -> * -> * -> *) that can be unfolded.

For example, given a data type

 data Tree a b c = Empty | Leaf a | Node (Tree a b c) b (Tree a b c)

a suitable instance would be

 instance Triunfoldable Tree where
   triunfold fa fb fc = choose
     [ pure Empty
     , Leaf <$> fa
     , Node <$> triunfold fa fb fc <*> fb <*> triunfold fa fb fc
     ]

i.e. it follows closely the instance for Biunfoldable, but for 3 type arguments instead of 2.

Methods

triunfold :: Unfolder f => f a -> f b -> f c -> f (t a b c)Source

Given a way to generate elements, return a way to generate structures containing those elements.

Instances

triunfold_ :: (Triunfoldable t, Unfolder f) => f (t () () ())Source

Unfold the structure, always using () as elements.

triunfoldBF :: (Triunfoldable t, Unfolder f) => f a -> f b -> f c -> f (t a b c)Source

Breadth-first unfold, which orders the result by the number of choose calls.

triunfoldBF_ :: (Triunfoldable t, Unfolder f) => f (t () () ())Source

Unfold the structure breadth-first, always using () as elements.

Specific unfolds

triunfoldr :: Triunfoldable t => (d -> Maybe (a, d)) -> (d -> Maybe (b, d)) -> (d -> Maybe (c, d)) -> d -> Maybe (t a b c)Source

triunfoldr builds a data structure from a seed value.

fromLists :: Triunfoldable t => [a] -> [b] -> [c] -> Maybe (t a b c)Source

Create a data structure using the lists as input. This can fail because there might not be a data structure with the same number of element positions as the number of elements in the lists.

randomDefault :: (Random a, Random b, Random c, RandomGen g, Triunfoldable t) => g -> (t a b c, g)Source

Generate a random value, can be used as default instance for Random.

arbitraryDefault :: (Arbitrary a, Arbitrary b, Arbitrary c, Triunfoldable t) => Gen (t a b c)Source

Provides a QuickCheck generator, can be used as default instance for Arbitrary.