-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | An optimising compiler for a functional, array-oriented language.
--   
--   Futhark is a small programming language designed to be compiled to
--   efficient parallel code. It is a statically typed, data-parallel, and
--   purely functional array language in the ML family, and comes with a
--   heavily optimising ahead-of-time compiler that presently generates GPU
--   code via CUDA and OpenCL, although the language itself is
--   hardware-agnostic.
--   
--   For more information, see the website at
--   <a>https://futhark-lang.org</a>
--   
--   For introductionary information about hacking on the Futhark compiler,
--   see <a>the hacking guide</a>. Regarding the internal design of the
--   compiler, the following modules make good starting points:
--   
--   <ul>
--   <li><a>Futhark</a> contains a basic architectural overview of the
--   compiler.</li>
--   <li><a>Futhark.IR.Syntax</a> explains the basic design of the
--   intermediate representation (IR).</li>
--   <li><a>Futhark.Construct</a> explains how to write code that
--   manipulates and creates AST fragments.</li>
--   </ul>
--   
@package futhark
@version 0.25.32

module Futhark.AD.DerivativesTests
tests :: TestTree

module Futhark.Analysis.AlgSimplifyTests
tests :: TestTree
instance GHC.Show.Show Futhark.Analysis.AlgSimplifyTests.TestableExp
instance Test.QuickCheck.Arbitrary.Arbitrary Futhark.Analysis.AlgSimplifyTests.TestableExp

module Futhark.IR.Mem.IntervalTests
tests :: TestTree


-- | A simple index operation representation. Every operation corresponds
--   to a constructor.
module Futhark.IR.Mem.IxFun.Alg
data IxFun num
Direct :: Shape num -> IxFun num
Permute :: IxFun num -> Permutation -> IxFun num
Index :: IxFun num -> Slice num -> IxFun num
FlatIndex :: IxFun num -> FlatSlice num -> IxFun num
Reshape :: IxFun num -> Shape num -> IxFun num
Coerce :: IxFun num -> Shape num -> IxFun num
OffsetIndex :: IxFun num -> num -> IxFun num
Expand :: num -> num -> IxFun num -> IxFun num
iota :: Shape num -> IxFun num
offsetIndex :: IxFun num -> num -> IxFun num
permute :: IxFun num -> Permutation -> IxFun num
reshape :: IxFun num -> Shape num -> IxFun num
coerce :: IxFun num -> Shape num -> IxFun num
slice :: IxFun num -> Slice num -> IxFun num
flatSlice :: IxFun num -> FlatSlice num -> IxFun num
expand :: num -> num -> IxFun num -> IxFun num
shape :: IntegralExp num => IxFun num -> Shape num
index :: (Eq num, IntegralExp num) => IxFun num -> Indices num -> num
disjoint :: (IntegralExp num, Ord num, Enum num) => IxFun num -> IxFun num -> Bool
instance GHC.Show.Show num => GHC.Show.Show (Futhark.IR.Mem.IxFun.Alg.IxFun num)
instance GHC.Classes.Eq num => GHC.Classes.Eq (Futhark.IR.Mem.IxFun.Alg.IxFun num)
instance Prettyprinter.Internal.Pretty num => Prettyprinter.Internal.Pretty (Futhark.IR.Mem.IxFun.Alg.IxFun num)


-- | Perform index function operations in both algebraic and LMAD
--   representations.
module Futhark.IR.Mem.IxFunWrapper
type IxFun num = (Maybe (LMAD num), IxFun num)
iota :: IntegralExp num => Shape num -> IxFun num
permute :: IxFun num -> Permutation -> IxFun num
reshape :: (Eq num, IntegralExp num) => IxFun num -> Shape num -> IxFun num
coerce :: IxFun num -> Shape num -> IxFun num
slice :: (Eq num, IntegralExp num) => IxFun num -> Slice num -> IxFun num
flatSlice :: IntegralExp num => IxFun num -> FlatSlice num -> IxFun num
expand :: IntegralExp num => num -> num -> IxFun num -> IxFun num

module Futhark.IR.Mem.IxFunTests
tests :: TestTree
instance Futhark.Util.IntegralExp.IntegralExp GHC.Types.Int

module Futhark.IR.Prop.RearrangeTests
tests :: TestTree
instance GHC.Show.Show Futhark.IR.Prop.RearrangeTests.Permutation
instance GHC.Classes.Ord Futhark.IR.Prop.RearrangeTests.Permutation
instance GHC.Classes.Eq Futhark.IR.Prop.RearrangeTests.Permutation
instance Test.QuickCheck.Arbitrary.Arbitrary Futhark.IR.Prop.RearrangeTests.Permutation

module Futhark.IR.SyntaxTests
parseString :: String -> (FilePath -> Text -> Either Text a) -> String -> a
instance Data.String.IsString Futhark.IR.Syntax.Core.Type
instance Data.String.IsString Futhark.IR.Syntax.Core.DeclExtType
instance Data.String.IsString Futhark.IR.Syntax.Core.DeclType
instance Data.String.IsString Language.Futhark.Core.VName
instance Data.String.IsString Futhark.IR.Syntax.Core.SubExp
instance Data.String.IsString Futhark.IR.Syntax.SubExpRes

module Futhark.IR.Prop.ReshapeTests
tests :: TestTree

module Futhark.IR.PropTests
tests :: TestTree

module Futhark.IR.MCTests
instance Data.String.IsString (Futhark.IR.Syntax.Stm Futhark.IR.MC.MC)
instance Data.String.IsString (Futhark.IR.Syntax.Body Futhark.IR.MC.MC)
instance Data.String.IsString (Futhark.IR.Syntax.Prog Futhark.IR.MC.MC)

module Futhark.IR.GPUTests
instance Data.String.IsString (Futhark.IR.Syntax.Stm Futhark.IR.GPU.GPU)
instance Data.String.IsString (Futhark.IR.Syntax.Body Futhark.IR.GPU.GPU)
instance Data.String.IsString (Futhark.IR.Syntax.Prog Futhark.IR.GPU.GPU)

module Futhark.Analysis.PrimExp.TableTests
tests :: TestTree

module Futhark.Optimise.ArrayLayout.AnalyseTests
tests :: TestTree

module Futhark.Optimise.ArrayLayout.LayoutTests
tests :: TestTree

module Futhark.Optimise.ArrayLayoutTests
tests :: TestTree

module Futhark.Optimise.MemoryBlockMerging.GreedyColoringTests
tests :: TestTree

module Futhark.Pkg.SolveTests
tests :: TestTree
instance GHC.Classes.Eq Futhark.Pkg.SolveTests.SolverRes
instance GHC.Show.Show Futhark.Pkg.SolveTests.SolverRes

module Futhark.ProfileTests
instance Test.QuickCheck.Arbitrary.Arbitrary Futhark.Profile.ProfilingEvent
instance Test.QuickCheck.Arbitrary.Arbitrary Futhark.Profile.ProfilingReport

module Futhark.BenchTests
tests :: TestTree
instance Test.QuickCheck.Arbitrary.Arbitrary Futhark.Bench.RunResult
instance Test.QuickCheck.Arbitrary.Arbitrary Futhark.Bench.DataResult
instance Test.QuickCheck.Arbitrary.Arbitrary Futhark.Bench.BenchResult

module Language.Futhark.ParserBenchmarks
benchmarks :: Benchmark

module Language.Futhark.PrimitiveTests
tests :: TestTree
arbitraryPrimValOfType :: PrimType -> Gen PrimValue
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Primitive.IntType
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Primitive.FloatType
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Primitive.PrimType
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Primitive.IntValue
instance Test.QuickCheck.Arbitrary.Arbitrary Numeric.Half.Internal.Half
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Primitive.FloatValue
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Primitive.PrimValue

module Language.Futhark.CoreTests
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Core.Name
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Core.VName

module Futhark.IR.Syntax.CoreTests
tests :: TestTree
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Core.NoUniqueness
instance (Test.QuickCheck.Arbitrary.Arbitrary shape, Test.QuickCheck.Arbitrary.Arbitrary u) => Test.QuickCheck.Arbitrary.Arbitrary (Futhark.IR.Syntax.Core.TypeBase shape u)
instance Test.QuickCheck.Arbitrary.Arbitrary Futhark.IR.Syntax.Core.Ident
instance Test.QuickCheck.Arbitrary.Arbitrary Futhark.IR.Syntax.Core.Rank
instance Test.QuickCheck.Arbitrary.Arbitrary Futhark.IR.Syntax.Core.Shape

module Language.Futhark.SemanticTests
tests :: TestTree

module Language.Futhark.SyntaxTests
tests :: TestTree
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Syntax.BinOp
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Core.Uniqueness
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Syntax.PrimType
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Syntax.PrimValue
instance Data.String.IsString Language.Futhark.Core.VName
instance Data.String.IsString v => Data.String.IsString (Language.Futhark.Syntax.QualName v)
instance Data.String.IsString Language.Futhark.Prop.UncheckedTypeExp
instance Data.String.IsString (Language.Futhark.Syntax.ScalarTypeBase Language.Futhark.Syntax.Size Language.Futhark.Core.NoUniqueness)
instance Data.String.IsString Language.Futhark.Syntax.StructType
instance Data.String.IsString Language.Futhark.Syntax.StructRetType
instance Data.String.IsString Language.Futhark.Syntax.ResRetType
instance Data.String.IsString Language.Futhark.Prop.UncheckedExp

module Language.Futhark.PrettyTests
tests :: TestTree

module Futhark.Internalise.TypesValuesTests
tests :: TestTree

module Language.Futhark.TypeChecker.TypesTests
tests :: TestTree

module Language.Futhark.TypeCheckerTests
tests :: TestTree
