(.require
 [library
  [lux (.except)
   [test
    ["_" property (.only Test)]]]]
 ["[0]" /
  ["[1][0]" apply]
  ["[1][0]" codec]
  ["[1][0]" comonad (.only)
   ["[1]/[0]" free]]
  ["[1][0]" enum]
  ["[1][0]" equivalence]
  ["[1][0]" hash]
  ["[1][0]" mix]
  ["[1][0]" functor (.only)
   ["[1]/[0]" contravariant]]
  ["[1][0]" interval]
  ["[1][0]" monad (.only)
   ["[1]/[0]" free]]
  ["[1][0]" monoid]
  ["[1][0]" order]])

(def functor
  Test
  (all _.and
       /functor.test
       /functor/contravariant.test
       ))

(def monad
  Test
  (all _.and
       /monad.test
       /monad/free.test
       ))

(def comonad
  Test
  (all _.and
       /comonad.test
       /comonad/free.test
       ))

(def .public test
  Test
  (all _.and
       /apply.test
       /codec.test
       /enum.test
       /equivalence.test
       /hash.test
       /mix.test
       /interval.test
       /monoid.test
       /order.test
       ..functor
       ..monad
       ..comonad
       ))
