{-|
module      :  Data.Number.Flint.Groups.Bool.Mat
copyright   :  (c) 2022 Hartmut Monien
license     :  GNU GPL, version 2 or above (see LICENSE)
maintainer  :  hmonien@uni-bonn.de

A `BoolMat` represents a dense matrix over the boolean 
semiring \(\left<\{0,1\},\vee,\wedge\right>\),
implemented as an array of entries of type `CInt`.

The dimension (number of rows and columns) of a matrix is fixed at
initialization, and the user must ensure that inputs and outputs to an
operation have compatible dimensions. The number of rows or columns in
a matrix can be zero.

== Example

@
import Control.Monad

import Data.Number.Flint

main = do
  a <- newBoolMat 3 5
  withBoolMat a $ \\a -> do
    forM_ [0..2] $ \\j -> do
      bool_mat_set_entry a j j 1
      bool_mat_set_entry a j (j+2) 1
  print a
@

Running main yields:

>>> main 
[1, 0, 1, 0, 0]
[0, 1, 0, 1, 0]
[0, 0, 1, 0, 1]
-}

module Data.Number.Flint.Groups.Bool.Mat (
  module Data.Number.Flint.Groups.Bool.Mat.FFI
) where

import Data.Number.Flint.Groups.Bool.Mat.FFI