---------------------------------------------------------------------
---Module : ListForms
-- a naive and simple data type for monoids
-- somewhat the minimum often used without much baggage
--
----------------------------------------------------------------------
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS -Wall #-}
module Uniform.ListForm
( module Uniform.ListForm,
module Uniform.Zero
)
where
import Uniform.Zero ( Zeros )
class (Monoid l, Zeros (LF l)) => ListForms l where
type LF l
prependOne :: LF l -> l -> l
appendOne :: l -> LF l -> l
mkOne :: LF l -> l
appendTwo :: l -> l -> l
prependOne a la = appendTwo (mkOne a) la
appendOne la a = appendTwo la (mkOne a)
appendTwo = error "not implemented appendTwo for ListForm (<>)"