{-# LANGUAGE TemplateHaskell, ViewPatterns #-}

-- |
-- The module Data.Thorn.Fold
module Data.Thorn.Fold (
    unfixdata
  , autofold, autoMutualFold
  , autounfold, autoMutualUnfold
    ) where

import Data.Thorn.Internal
import Language.Haskell.TH
import Data.List
import Data.Maybe
import Control.Monad
import Control.Applicative
import Control.Monad.State
import Data.Monoid

-- |
-- @unfixdata t@ provides a declaration of a data whose fixpoint is the recursive type @t@.
unfixdata :: TypeQ -> DecsQ
unfixdata t = do fail "oh"

-- |
-- @autofold t@ provides a folding function for the recursive type @t@.
autofold :: TypeQ -> ExpQ
autofold t = do fail "oh"

-- |
-- @autoMutualFold ts@ provides a folding function for the mutually recursive types @ts@.
autoMutualFold :: [TypeQ] -> ExpQ
autoMutualFold ts = do fail "oh"

-- |
-- @autounfold t@ provides an unfolding function for the recursive type @t@.
autounfold :: TypeQ -> ExpQ
autounfold t = do fail "oh"

-- |
-- @autoMutualUnfold ts@ provides an unfolding function for the mutually recursive types @ts@.
autoMutualUnfold :: [TypeQ] -> ExpQ
autoMutualUnfold ts = do fail "oh"