>    toFList [] = id
>    toFList (xs++ys) = toFList xs . toFList ys
>
>    toList id = []
>    toList (f . g) = toList f ++ toList g

These laws do not *define* the isomorphisms because their behavior on
singletons is not fixed. Combining them with laws using a 'point'
function for functional lists

    point = (:)

the isomorphisms are characterized uniquely:

    toFList [x] = point x
    toList (point x) = [x]

This might be an argument in favor of a Pointed class without Functor
constraint as it shows that other pointed structures have reasonable
laws involving 'point' as well.

Sebastian

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to