module type CatenableList = sig type 'a cat val empty : 'a cat val is_empty : 'a cat -> bool val cons : 'a -> 'a cat -> 'a cat val snoc : 'a cat -> 'a -> 'a cat val append : 'a cat -> 'a cat -> 'a cat val head : 'a cat -> 'a val tail : 'a cat -> 'a cat end |