{-# LANGUAGE GADTs,RankNTypes,DeriveFunctor #-}

module Data.Faceted.Pure (
  Label,
  Faceted,
  makePrivate,
  makeFaceted,
  makePublic,
  bottom
  ) where

import Data.Faceted.Internal

import Control.Applicative

bottom = Raw undefined

-- | < k ? x : bottom >   ====>  makePrivate k x

makePrivate :: Label -> a -> Faceted a
makePrivate k x = Faceted k (Raw x) (bottom)

-- | x ==> Raw x ===> makePublic x

makePublic :: a -> Faceted a
makePublic x = Raw x

makeFaceted = Faceted