module Grenade (
  -- | This is an empty module which simply re-exports public definitions
  --   for machine learning with Grenade.

  -- * Exported modules
  --
  -- | The core types and runners for Grenade.
    module Grenade.Core

  -- | The neural network layer zoo
  , module Grenade.Layers


    -- * Overview of the library
    -- $library

    -- * Example usage
    -- $example

  ) where

import           Grenade.Core
import           Grenade.Layers

{- $library
Grenade is a purely functional deep learning library.

It provides an expressive type level API for the construction
of complex neural network architectures. Backing this API is and
implementation written using BLAS and LAPACK, mostly provided by
the hmatrix library.

-}

{- $example
A few examples are provided at https://github.com/HuwCampbell/grenade
under the examples folder.

The starting place is to write your neural network type and a
function to create a random layer of that type. The following
is a simple example which runs a logistic regression.

> type MyNet = Network '[ FullyConnected 10 1, Logit ] '[ 'D1 10, 'D1 1, 'D1 1 ]
>
> randomMyNet :: MonadRandom MyNet
> randomMyNet = randomNetwork

The function `randomMyNet` witnesses the `CreatableNetwork`
constraint of the neural network, and in doing so, ensures the network
can be built, and hence, that the architecture is sound.
-}