{-# LANGUAGE DeriveAnyClass    #-}
{-# LANGUAGE DeriveFoldable    #-}
{-# LANGUAGE DeriveFunctor     #-}
{-# LANGUAGE DeriveGeneric     #-}
{-# LANGUAGE DeriveTraversable #-}
module ZM.Type.List(List(..)) where

import           Control.DeepSeq
import           Data.Flat
import           Data.Model

-- |A list
data List a = Nil
             | Cons a (List a)
  deriving (Eq, Ord, Show, NFData, Generic, Functor, Foldable, Traversable, Flat)

instance Model a => Model (List a)