cabal-version:      3.0
-- The cabal-version field refers to the version of the .cabal specification,
-- and can be different from the cabal-install (the tool) version and the
-- Cabal (the library) version you are using. As such, the Cabal (the library)
-- version used must be equal or greater than the version stated in this field.
-- Starting from the specification version 2.2, the cabal-version field must be
-- the first thing in the cabal file.

-- Initial package description 'Mazelib' generated by
-- 'cabal init'. For further documentation, see:
--   http://haskell.org/cabal/users-guide/
--
-- The name of the package.
name:               mazelib

-- The package version.
-- See the Haskell package versioning policy (PVP) for standards
-- guiding when and how versions should be incremented.
-- https://pvp.haskell.org
-- PVP summary:     +-+------- breaking API changes
--                  | | +----- non-breaking API additions
--                  | | | +--- code changes with no API change
version:            0.1.0.0

category:           Library

-- A short (one-line) description of the package.
synopsis:           A library for 2D maze generation and solving

-- A longer description of the package.
description:
    >>> :{
    let result = generateMaze AldousBroder (3, 3) $ Just (mkStdGen 123)
    in case result of
        Left e ->
            do putStrLn e
        Right (maze, exits) ->
            let path = cleanPath $ solveMaze maze exits Nothing
            in do putStrLn $ mazeToString maze exits (Just path)
    :}
    +++++++
    SOOOOO+
    +++++O+
    +OOO+O+
    +O+O+O+
    +O+OOO+
    +E+++++

    An (N x M) Maze is represented in memory as a (2N + 1 x 2M + 1) boolean matrix. 
    In an idealized maze, walls are 0 width, but in memory they are width 1, thus 
    the larger size. From this we infer that coordinates (x, y) where both x and y 
    are odd integers map to the coordinates in the ideal maze -- i.e. 
    @(x, y) -> (x - 1 $ `div` 2, y - 1 $ `div` 2)@. 


-- The license under which the package is released.
license:            GPL-3.0-or-later

-- The file containing the license text.
license-file:       LICENSE

-- The package author(s).
author:             Kevin Vicente

-- An email address to which users can send suggestions, bug reports, and patches.
maintainer:         kvicente@fastmail.com

-- A copyright notice.
-- copyright:
build-type:         Simple

-- Extra doc files to be distributed with the package, such as a CHANGELOG or a README.
extra-doc-files:    CHANGELOG.md

-- Extra source files to be distributed with the package, such as examples, or a tutorial module.
-- extra-source-files:

common warnings
    ghc-options: -Wall

library
    -- Import common warning flags.
    import:           warnings

    -- Modules exported by the library.
    exposed-modules:
        Mazelib.Generate
        Mazelib.Solve

    -- Modules included in this library but not exported.
    other-modules:
        Mazelib.Common

    -- LANGUAGE extensions used by modules in this package.
    -- other-extensions:

    -- Other library packages from which modules are imported.
    build-depends:
        base ^>=4.16.4.0,
        random ^>=1.2.0.0

    -- Directories containing source files.
    hs-source-dirs:   src

    -- Base language which the package is written in.
    default-language: Haskell2010


test-suite generate-tests
    -- Import common warning flags.
    import:           warnings

    -- Base language which the package is written in.
    default-language: Haskell2010

    -- Modules included in this executable, other than Main.
    -- other-modules:

    -- LANGUAGE extensions used by modules in this package.
    -- other-extensions:

    -- The interface type and version of the test suite.
    type:             exitcode-stdio-1.0

    -- Directories containing source files.
    hs-source-dirs:   test

    -- The entrypoint to the test suite.
    main-is:          TestGenerate.hs

    -- Test dependencies.
    build-depends:
        base ^>=4.16.4.0,
        random ^>=1.2.0.0,
        mazelib

test-suite solve-tests
    -- Import common warning flags.
    import:           warnings

    -- Base language which the package is written in.
    default-language: Haskell2010

    -- Modules included in this executable, other than Main.
    -- other-modules:

    -- LANGUAGE extensions used by modules in this package.
    -- other-extensions:

    -- The interface type and version of the test suite.
    type:             exitcode-stdio-1.0

    -- Directories containing source files.
    hs-source-dirs:   test

    -- The entrypoint to the test suite.
    main-is:          TestSolve.hs

    -- Test dependencies.
    build-depends:
        base ^>=4.16.4.0,
        random ^>=1.2.0.0,
        mazelib

source-repository head
    type:     git
    location: https://github.com/ImJustTrying/Mazelib.git