content: {-# LANGUAGE ConstraintKinds #-}
  {-# LANGUAGE KindSignatures  #-}
  {-# LANGUAGE CPP             #-}
  
  -- | ConstraintKind synonym for marking partial functions
  module Partial(Partial) where
  -- Originally taken from the @safe@ package
  
  -- GHC has changed its opinion on the location a few times
  -- v0: GHC 7.4.1, has ConstraintKinds
  -- v1: GHC 7.10.2, base 4.8.1.0 = CallStack
  -- v2: GHC 8.0.1, base 4.9.0.0 = HasCallStack
  
  -- We never support GHC 7.10.2 style because that requires users to pass the FlexibleContexts
  -- extension
  
  #if __GLASGOW_HASKELL__ >= 800
  import GHC.Stack
  #else
  import GHC.Exts
  #endif
  
  -- | A constraint which documents that a function is partial, and on GHC 8.0
  --   and above produces a stack trace on failure. For example:
  --
  -- @
  -- myHead :: 'Partial' => [a] -> a
  -- myHead [] = error \"bad\"
  -- myHead (x:xs) = x
  -- @
  --
  --   When using 'Partial' with GHC 7.8 or below you need to enable the
  --   language feature @ConstraintKinds@, e.g. @{-\# LANGUAGE ConstraintKinds \#-}@
  --   at the top of the file.
  #if __GLASGOW_HASKELL__ >= 800
  type Partial = HasCallStack
  #else
  type Partial = (() :: Constraint)
  #endif
  