-- 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 Test.QuickCheck.Arbitrary.Arbitrary Futhark.Analysis.AlgSimplifyTests.TestableExp
instance GHC.Internal.Show.Show 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.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)
instance GHC.Internal.Show.Show num => GHC.Internal.Show.Show (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 Test.QuickCheck.Arbitrary.Arbitrary Futhark.IR.Prop.RearrangeTests.Permutation
instance GHC.Classes.Eq Futhark.IR.Prop.RearrangeTests.Permutation
instance GHC.Classes.Ord Futhark.IR.Prop.RearrangeTests.Permutation
instance GHC.Internal.Show.Show Futhark.IR.Prop.RearrangeTests.Permutation

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

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

module Futhark.IR.PropTests
tests :: TestTree

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

module Futhark.IR.GPUTests
instance GHC.Internal.Data.String.IsString (Futhark.IR.Syntax.Body Futhark.IR.GPU.GPU)
instance GHC.Internal.Data.String.IsString (Futhark.IR.Syntax.Prog Futhark.IR.GPU.GPU)
instance GHC.Internal.Data.String.IsString (Futhark.IR.Syntax.Stm 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.Internal.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.BenchResult
instance Test.QuickCheck.Arbitrary.Arbitrary Futhark.Bench.DataResult
instance Test.QuickCheck.Arbitrary.Arbitrary Futhark.Bench.RunResult

module Language.Futhark.ParserBenchmarks
benchmarks :: Benchmark

module Language.Futhark.PrimitiveTests
tests :: TestTree
arbitraryPrimValOfType :: PrimType -> Gen PrimValue
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Primitive.FloatType
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Primitive.FloatValue
instance Test.QuickCheck.Arbitrary.Arbitrary Numeric.Half.Internal.Half
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Primitive.IntType
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Primitive.IntValue
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Primitive.PrimType
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 Futhark.IR.Syntax.Core.Ident
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Core.NoUniqueness
instance Test.QuickCheck.Arbitrary.Arbitrary Futhark.IR.Syntax.Core.Rank
instance Test.QuickCheck.Arbitrary.Arbitrary Futhark.IR.Syntax.Core.Shape
instance (Test.QuickCheck.Arbitrary.Arbitrary shape, Test.QuickCheck.Arbitrary.Arbitrary u) => Test.QuickCheck.Arbitrary.Arbitrary (Futhark.IR.Syntax.Core.TypeBase shape u)

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.Syntax.PrimType
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Syntax.PrimValue
instance Test.QuickCheck.Arbitrary.Arbitrary Language.Futhark.Core.Uniqueness
instance GHC.Internal.Data.String.IsString Language.Futhark.Prop.UncheckedExp
instance GHC.Internal.Data.String.IsString v => GHC.Internal.Data.String.IsString (Language.Futhark.Syntax.QualName v)
instance GHC.Internal.Data.String.IsString Language.Futhark.Syntax.StructRetType
instance GHC.Internal.Data.String.IsString Language.Futhark.Syntax.ResRetType
instance GHC.Internal.Data.String.IsString (Language.Futhark.Syntax.ScalarTypeBase Language.Futhark.Syntax.Size Language.Futhark.Core.NoUniqueness)
instance GHC.Internal.Data.String.IsString Language.Futhark.Syntax.StructType
instance GHC.Internal.Data.String.IsString Language.Futhark.Prop.UncheckedTypeExp
instance GHC.Internal.Data.String.IsString Language.Futhark.Core.VName

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
