{-# language DeriveTraversable #-} data Template a = Val a | List [Template a] deriving ( Show , Functor , Foldable , Traversable )