{-#LANGUAGE FlexibleContexts #-}
{-#LANGUAGE FlexibleInstances #-}
{-#LANGUAGE MultiParamTypeClasses #-}
{-#LANGUAGE TypeOperators #-}

module Text.XML.Twiml.Verbs.Leave
  ( -- * @\<Leave\>@
    -- $leave
    Leave
    -- ** Constructor
  , leave
  ) where

import Text.XML.Twiml.Types
import Text.XML.Twiml.Verbs.End (End)
import Text.XML.Twiml.Internal (Twiml(..), Twiml', TwimlF(..))

{- $leave This example

@
module Example where

import Text.XML.Twiml

example
  = respond
  . leave
  $ end
@

produces the following TwiML response:

@
\<?xml version=\"1.0\" encoding=\"UTF-8\"?\>
\<Response\>
  \<Leave \/\>
\<\/Response\>
@
-}

newtype Leave p = Leave { fromLeave :: Twiml' p }
instance (p :/~ Gather') => Twiml p (Leave p) where toTwiml' = fromLeave

leave :: (p :/~ Gather') => End p -> Leave p
leave = const . Leave $ Fix LeaveF