ú΄^     $sequence of bits (possibley nested) all 1 bits (identity on ( )) all 0 bits (identity on ())  type product DType product of two types is usually a product type (or pair type).  Conceptually, for example, Int *. Bool = (Int,Bool).  Note, () have at least one identity , L and type product against such identities may not result in a prodcut type.  identity on ()   unit *. a = a = a *. unit @Note, there can be other identities depending on how you define .  Any type a that satisfy null(expand a) is an identity on ().  The 3 is the most simple and basic identity among them, C which serves as a degenerate type for nullary data data constants  (e.g., , ). type expansion rule JThe definition of expand summarizes the structure of algebraic data type.  Conceptually, for example, 8 expand unit = [] -- the-non expandable degenerate type + expand Bool = [unit,unit] -- True, False 1 expand (Maybe a) = [unit, a] -- Nothing, Just a ,extract the type information of a given bit  For example,  typeof (O Bool) = Bool  typeof (I Bool) = Int ) typeof (Bs [O unit,I unit] Bool) = Bool 4turn bits into strings without the type information  For example, * showB (Bs [O unit,I unit] Bool) = "[01]" same as  , but takes off the outermost square bracket  For example, ) showB' (Bs [O unit,I unit] Bool) = "01" +print a newline ended string produced from   on the standard output  bitwise-and  bitwise-or bitwise negation reduce s to canonical forms tensor product congruence modulo           sparsebit-0.1Data.SparseBITBITBsIOExpand*.unitexpandtypeofshowBshowB'printB.&.&..|.|.negreduce.**=:=ghc-primGHC.BoolTrueFalse