{-# OPTIONS_HADDOCK not-home #-}

{-|
Description:    High-level bindings providing a idiomatic Haskell interface to libcdio.

Copyright:      (c) 2019-2021 Sam May
License:        GPL-3.0-or-later
Maintainer:     ag@eitilt.life

Stability:      stable
Portability:    non-portable (requires libcdio)

One of the goals of these bindings is to make it not only possible to interface
with the libcdio library, but to do so as comfortably and safely as possible.
In that, the "Foreign.Libcdio" interface is a bit lacking, due to its mutable
state and requirement of threading 'IO' through computations.  The modules in
this namespace provide an alternative which builds on that base, with a more
native style.  As a general rule, a project should /only/ import modules from
the @Sound@ or the @Foreign@ namespaces, not both, as while the types can often
be interchanged, several function names have been reused and so may collide.
-}
module Sound.Libcdio
    ( -- * Types
      -- ** Session
      Cdio
    , CdioError ( .. )
    , CdioErrorType ( .. )
    , SessionArg ( .. )
    , AccessMode ( .. )
      -- ** Version
    , Foreign.Version
    , Foreign.makeVersion
      -- * Evaluation
    , open
    , openMode
    , runCdio
    , getArg
    , getAccessMode
      -- * Library data
    , Foreign.cdioVersionString
    , Foreign.libcdioVersionNum
    , Foreign.apiVersion
    ) where


import qualified Foreign.Libcdio.Version as Foreign

import Sound.Libcdio.Types.Cdio