content: 
  module DDC.Core.Fragment.Feature
          (Feature(..))
  where
  
  
  -- | Language feature supported by a fragment.
  data Feature
          -- Type system features ---------------------------
          -- | Track effect type information.
          = TrackedEffects
  
          -- | Track closure type information.
          | TrackedClosures
  
          -- | Attach latent effects to function types.
          | FunctionalEffects
  
          -- | Attach latent closures to function types.
          | FunctionalClosures
  
          -- | Treat effects as capabilities.
          | EffectCapabilities
  
          -- | Insert implicit run casts for effectful applications.
          | ImplicitRun
  
          -- | Insert implicit box casts for bodies of abstractions.
          | ImplicitBox
  
          -- | Allow unresolved meta-variables in types.
          | MetaVariables
  
          -- General features -------------------------------
          -- | Partially applied primitive operators.
          | PartialPrims
  
          -- | Partially applied functions
          | PartialApplication
  
          -- | Function application where the thing being applied
          --   is not a variable.
          --   Most backend languages (like LLVM) don't support this.
          | GeneralApplication
  
          -- | Nested function bindings.
          --   The output of the lambda-lifter should not contain these.
          | NestedFunctions
  
          -- | Recursive let-expressions where the right hand sides
          --   are not lambda abstractions.
          | GeneralLetRec
  
          -- | Debruijn binders.
          --   Most backends will want to use real names, instead of indexed
          --   binders.
          | DebruijnBinders
  
          -- | Allow data and witness vars without binding occurrences if
          --   they are annotated directly with their types. This lets
          --   us work with open terms.
          | UnboundLevel0Vars
  
          -- Sanity -----------------------------------------
          -- | Allow name shadowing.
          | NameShadowing
  
          -- | Allow unused named data and witness bindings.
          | UnusedBindings
  
          -- | Allow unused named matches.
          | UnusedMatches
          deriving (Eq, Ord, Show)
  
  