add functor derivation, more concise foldable law, remove arg from toArray derivation