add (++), reverse, intersperse, intercalate
add type.hpp
use detail/type.hpp, change function name