packages feed

swarm-0.7.0.0: swarm.cabal

cabal-version: 3.6
name: swarm
version: 0.7.0.0
synopsis: 2D resource gathering game with programmable robots
description:
  Swarm is a 2D programming and resource gathering
  game. Program your robots to explore the world and
  collect resources, which in turn allows you to
  build upgraded robots that can run more
  interesting and complex programs. See the
  <https://github.com/swarm-game/swarm/blob/main/README.md README>
  for more information and instructions on how to
  play or contribute!

  == Module organization
  For developers getting oriented, Swarm's modules are organized into
  sublibraries.  Roughly in order from inner to outer, they are:

  * swarm-util: miscellaneous utilities
  * swarm-lang: parsing, typechecking, etc. for the Swarm language
  * swarm-topography: working with location in 2D (sub-)worlds
  * swarm-scenario: scenario descriptions, parsing, & processing
  * swarm-engine: game simulation
  * swarm-doc: generating documentation
  * swarm-tui: textual user interface
  * swarm-web: web interface
  * swarm: the swarm executable

  <<docs/image/sublibrary-graph.svg>>

  See the [Swarm module guide](https://github.com/swarm-game/swarm/wiki/Module-guide)
  for a more in-depth guide to the codebase.

license: BSD-3-Clause
license-file: LICENSE
author: Brent Yorgey
maintainer: byorgey@gmail.com
bug-reports: https://github.com/swarm-game/swarm/issues
copyright: Brent Yorgey 2021
category: Game
tested-with: ghc ==9.6.6 || ==9.8.2 || ==9.10.1 || ==9.12.1
extra-doc-files:
  CHANGELOG.md

extra-source-files:
  editors/emacs/*.el
  editors/vim/*.lua
  editors/vim/*.vim
  editors/vscode/syntaxes/*.yaml
  example/*.sw

extra-doc-files: docs/image/sublibrary-graph.svg
data-dir: data/
data-files:
  *.txt
  *.yaml
  scenarios/**/*.sw
  scenarios/**/*.txt
  scenarios/**/*.yaml
  test/language-snippets/**/*.sw
  test/saves/*.yaml
  test/standalone-topography/*.png
  test/standalone-topography/*.yaml
  worlds/*.world

source-repository head
  type: git
  location: https://github.com/swarm-game/swarm.git

flag ci
  description: Make warnings error
  default: False
  manual: True

common common
  if flag(ci)
    ghc-options: -Werror
  ghc-options:
    -Wall
    -Wcompat
    -Widentities
    -Wincomplete-uni-patterns
    -Wincomplete-record-updates
    -Wno-star-is-type
    -Wpartial-fields

  default-language: Haskell2010

common stan-config
  ghc-options:
    -fwrite-ide-info

-- Harmless extensions from GHC2021
common ghc2021-extensions
  ghc-options:
    -Wprepositive-qualified-module
    -Wunused-packages

  default-extensions:
    -- Note we warn on prequalified
    -- Not GHC2021, but until we get \cases we use \case a lot
    BangPatterns
    DeriveAnyClass
    DeriveDataTypeable
    DeriveFunctor
    DeriveGeneric
    DeriveTraversable
    ExplicitForAll
    FlexibleContexts
    FlexibleInstances
    GADTSyntax
    ImportQualifiedPost
    LambdaCase
    MultiParamTypeClasses
    NumericUnderscores
    RankNTypes
    ScopedTypeVariables
    StandaloneDeriving
    TupleSections
    TypeApplications
    TypeOperators

common base
  build-depends: base >=4.18 && <4.22

common AhoCorasick
  build-depends: AhoCorasick >=0.0.4 && <0.0.5

common JuicyPixels
  build-depends: JuicyPixels >=3.3 && <3.4

common QuickCheck
  build-depends: QuickCheck >=2.14 && <2.16

common SHA
  build-depends: SHA >=1.6.4 && <1.6.5

common aeson
  build-depends: aeson >=2.2 && <2.3

common array
  build-depends: array >=0.5.4 && <0.6

common astar
  build-depends: astar >=0.3 && <0.3.1

common boolexpr
  build-depends: boolexpr >=0.2 && <0.3

common brick
  build-depends: brick >=2.1.1 && <2.9

common brick-list-skip
  build-depends: brick-list-skip >=0.1.1.2 && <0.2

common brick-tabular-list
  build-depends: brick-tabular-list >=2.2.0 && <2.2.1

common bytestring
  build-depends: bytestring >=0.10 && <0.13

common clock
  build-depends: clock >=0.8.2 && <0.9

common colour
  build-depends: colour >=2.3.6 && <2.4

common commonmark
  build-depends: commonmark >=0.2 && <0.3

common commonmark-extensions
  build-depends: commonmark-extensions >=0.2 && <0.3

common containers
  build-depends: containers >=0.6.2 && <0.8

common cookie
  build-depends: cookie >=0.4 && <1.0

common data-fix
  build-depends: data-fix >=0.3 && <0.4

common deriving-compat
  build-depends: deriving-compat >=0.6 && <0.7

common directory
  build-depends: directory >=1.3 && <1.4

common dotgen
  build-depends: dotgen >=0.4 && <0.5

common either
  build-depends: either >=5.0 && <5.1

common exceptions
  build-depends: exceptions >=0.10 && <0.11

common extra
  build-depends: extra >=1.8 && <1.9

common filepath
  build-depends: filepath >=1.4 && <1.6

common free
  build-depends: free >=5.2 && <5.3

common fused-effects
  build-depends: fused-effects >=1.1.2.5 && <1.2

common fused-effects-lens
  build-depends: fused-effects-lens >=1.2.0.1 && <1.3

common fuzzy
  build-depends: fuzzy >=0.1 && <0.2

common generic-data
  build-depends: generic-data >=1.0 && <1.2

common githash
  build-depends: githash >=0.1.6 && <0.2

common hashable
  build-depends: hashable >=1.3.4 && <1.6

common hsnoise
  build-depends: hsnoise >=0.0.3 && <0.1

common http-client
  build-depends: http-client >=0.7 && <0.8

common http-client-tls
  build-depends: http-client-tls >=0.3 && <0.4

common http-types
  build-depends: http-types >=0.12 && <0.13

common lens
  build-depends: lens >=4.19 && <5.4

common linear
  build-depends: linear >=1.21.6 && <1.24

common lsp
  build-depends: lsp >=2.4 && <2.8

common megaparsec
  build-depends: megaparsec >=9.6.1 && <9.8

common minimorph
  build-depends: minimorph >=0.3 && <0.4

common MissingH
  build-depends: MissingH >=1.4 && <2

common monad-logger
  build-depends: monad-logger >=0.3.0 && <0.4.0

common monoidmap
  build-depends: monoidmap >=0.0.3.0 && <0.1

common monoidmap-aeson
  build-depends: monoidmap-aeson >=0.0.0.1 && <0.1

common mtl
  build-depends: mtl >=2.2.2 && <2.4

common murmur3
  build-depends: murmur3 >=1.0.4 && <1.1

common natural-sort
  build-depends: natural-sort >=0.1.2 && <0.2

common nonempty-containers
  build-depends: nonempty-containers >=0.3.4 && <0.3.5

common optparse-applicative
  build-depends: optparse-applicative >=0.16 && <0.19

common ordered-containers
  build-depends: ordered-containers >=0.2.4 && <0.2.5

common palette
  build-depends: palette >=0.3 && <0.4

common pandoc
  build-depends: pandoc >=3.0 && <3.7

common pandoc-types
  build-depends: pandoc-types >=1.23 && <1.24

common parser-combinators
  build-depends: parser-combinators >=1.2 && <1.4

common prettyprinter
  build-depends: prettyprinter >=1.7.0 && <1.8

common quickcheck-instances
  build-depends: quickcheck-instances >=0.3.17 && <0.4

common random
  build-depends: random >=1.2.0 && <1.4

common scientific
  build-depends: scientific >=0.3.6 && <0.3.9

common servant
  build-depends: servant >=0.19 && <0.22

common servant-docs
  build-depends: servant-docs >=0.12 && <0.14

common servant-multipart
  build-depends: servant-multipart >=0.11 && <1.0

common servant-JuicyPixels
  build-depends: servant-JuicyPixels >=0.3.1 && <0.3.2

common servant-server
  build-depends: servant-server >=0.19 && <0.22

common split
  build-depends: split >=0.2.3 && <0.3

common sqlite-simple
  build-depends: sqlite-simple >=0.4.19.0 && <0.4.20

common syb
  build-depends: syb >=0.7 && <0.8

common tagged
  build-depends: tagged >=0.8 && <0.9

common tasty
  build-depends: tasty >=0.10 && <1.6

common tasty-bench
  build-depends: tasty-bench >=0.3.1 && <0.5

common tasty-expected-failure
  build-depends: tasty-expected-failure >=0.12 && <0.13

common tasty-hunit
  build-depends: tasty-hunit >=0.10 && <0.11

common tasty-quickcheck
  build-depends: tasty-quickcheck >=0.10 && <0.12

common template-haskell
  build-depends: template-haskell >=2.16 && <2.24

common terminal-size
  build-depends: terminal-size >=0.3 && <1.0

common text
  build-depends: text >=1.2.4 && <2.2

common text-rope
  build-depends: text-rope >=0.2 && <0.4

common text-zipper
  build-depends: text-zipper >=0.10 && <0.14

common time
  build-depends: time >=1.9 && <1.15

common transformers
  build-depends: transformers >=0.5 && <0.7

common unicode-show
  build-depends: unicode-show >=0.1 && <0.2

common unordered-containers
  build-depends: unordered-containers >=0.2.14 && <0.3

common utf8-string
  build-depends: utf8-string >=1.0 && <2.0

common vector
  build-depends: vector >=0.12 && <0.14

common vty
  build-depends: vty >=6.1 && <6.5

common vty-crossplatform
  build-depends: vty-crossplatform >=0.4 && <0.5

common wai
  build-depends: wai >=3.2 && <3.3

common wai-app-static
  build-depends: wai-app-static >=3.1.8 && <3.2

common wai-extra
  build-depends: wai-extra >=3.1 && <3.2

common warp
  build-depends: warp >=3.2 && <3.5

common witch
  build-depends: witch >=1.1.1.0 && <1.4

common witherable
  build-depends: witherable >=0.4 && <0.6

common word-wrap
  build-depends: word-wrap >=0.5 && <0.6

common yaml
  build-depends: yaml >=0.11 && <0.11.12.0

library swarm-lang
  import:
    stan-config, common, ghc2021-extensions,
    aeson,
    base,
    commonmark,
    commonmark-extensions,
    containers,
    data-fix,
    deriving-compat,
    extra,
    free,
    fused-effects,
    generic-data,
    hashable,
    lens,
    lsp,
    megaparsec,
    monoidmap,
    monoidmap-aeson,
    mtl,
    parser-combinators,
    prettyprinter,
    split,
    syb,
    template-haskell,
    terminal-size,
    text,
    text-rope,
    unicode-show,
    vector,
    vty,
    witch,
    yaml,

  visibility: public
  -- cabal-gild: discover src/swarm-lang
  exposed-modules:
    Swarm.Effect.Unify
    Swarm.Effect.Unify.Common
    Swarm.Effect.Unify.Fast
    Swarm.Effect.Unify.Naive
    Swarm.Language.Capability
    Swarm.Language.Context
    Swarm.Language.Elaborate
    Swarm.Language.Format
    Swarm.Language.JSON
    Swarm.Language.Key
    Swarm.Language.Kindcheck
    Swarm.Language.LSP
    Swarm.Language.LSP.Hover
    Swarm.Language.LSP.VarUsage
    Swarm.Language.Parser
    Swarm.Language.Parser.Comment
    Swarm.Language.Parser.Core
    Swarm.Language.Parser.Lex
    Swarm.Language.Parser.QQ
    Swarm.Language.Parser.Record
    Swarm.Language.Parser.Term
    Swarm.Language.Parser.Type
    Swarm.Language.Parser.Util
    Swarm.Language.Parser.Value
    Swarm.Language.Pipeline
    Swarm.Language.Pipeline.QQ
    Swarm.Language.Requirements
    Swarm.Language.Requirements.Analysis
    Swarm.Language.Requirements.Type
    Swarm.Language.Syntax
    Swarm.Language.Syntax.AST
    Swarm.Language.Syntax.CommandMetadata
    Swarm.Language.Syntax.Comments
    Swarm.Language.Syntax.Constants
    Swarm.Language.Syntax.Loc
    Swarm.Language.Syntax.Pattern
    Swarm.Language.Syntax.Pretty
    Swarm.Language.Syntax.Util
    Swarm.Language.TDVar
    Swarm.Language.Text.Markdown
    Swarm.Language.Typecheck
    Swarm.Language.Typed
    Swarm.Language.Types
    Swarm.Language.Value
    Swarm.Language.Var

  other-modules: Paths_swarm
  autogen-modules: Paths_swarm
  build-depends: swarm:swarm-util
  hs-source-dirs: src/swarm-lang
  ghc-options:
    -hiedir=.hie/src/swarm-lang

  default-language: Haskell2010
  default-extensions:
    -- Avoid unexpected unevaluated thunk buildup
    -- See discussion in #415
    StrictData

library swarm-topography
  import:
    stan-config, common, ghc2021-extensions,
    AhoCorasick,
    JuicyPixels,
    aeson,
    array,
    either,
    base,
    containers,
    extra,
    hashable,
    lens,
    linear,
    nonempty-containers,
    servant-docs,
    split,
    text,
    transformers,
    unordered-containers,
    vector,
    yaml,

  visibility: public
  -- cabal-gild: discover src/swarm-topography
  exposed-modules:
    Swarm.Game.Location
    Swarm.Game.Scenario.Topography.Area
    Swarm.Game.Scenario.Topography.Grid
    Swarm.Game.Scenario.Topography.Modify
    Swarm.Game.Scenario.Topography.Navigation.Waypoint
    Swarm.Game.Scenario.Topography.Placement
    Swarm.Game.Scenario.Topography.ProtoCell
    Swarm.Game.Scenario.Topography.Rasterize
    Swarm.Game.Scenario.Topography.Structure
    Swarm.Game.Scenario.Topography.Structure.Assembly
    Swarm.Game.Scenario.Topography.Structure.Named
    Swarm.Game.Scenario.Topography.Structure.Overlay
    Swarm.Game.Scenario.Topography.Structure.Recognition
    Swarm.Game.Scenario.Topography.Structure.Recognition.Log
    Swarm.Game.Scenario.Topography.Structure.Recognition.Precompute
    Swarm.Game.Scenario.Topography.Structure.Recognition.Prep
    Swarm.Game.Scenario.Topography.Structure.Recognition.Registry
    Swarm.Game.Scenario.Topography.Structure.Recognition.Static
    Swarm.Game.Scenario.Topography.Structure.Recognition.Symmetry
    Swarm.Game.Scenario.Topography.Structure.Recognition.Tracking
    Swarm.Game.Scenario.Topography.Structure.Recognition.Type
    Swarm.Game.Scenario.Topography.Terraform
    Swarm.Game.Universe
    Swarm.Game.World.Coords

  other-modules: Paths_swarm
  autogen-modules: Paths_swarm
  build-depends:
    swarm:swarm-util

  hs-source-dirs: src/swarm-topography
  ghc-options:
    -hiedir=.hie/src/swarm-topography

  default-language: Haskell2010
  default-extensions:
    -- Avoid unexpected unevaluated thunk buildup
    -- See discussion in #415
    StrictData

library swarm-scenario
  import:
    stan-config, common, ghc2021-extensions,
    JuicyPixels,
    aeson,
    array,
    base,
    boolexpr,
    bytestring,
    clock,
    colour,
    containers,
    directory,
    either,
    extra,
    filepath,
    fused-effects,
    hashable,
    nonempty-containers,
    hsnoise,
    lens,
    linear,
    megaparsec,
    monad-logger,
    monoidmap,
    monoidmap-aeson,
    mtl,
    murmur3,
    palette,
    parser-combinators,
    prettyprinter,
    random,
    servant-docs,
    tagged,
    text,
    vector,
    vty,
    witch,
    yaml,

  visibility: public
  -- cabal-gild: discover src/swarm-scenario
  exposed-modules:
    Swarm.Constant
    Swarm.Game.Achievement.Definitions
    Swarm.Game.Device
    Swarm.Game.Display
    Swarm.Game.Entity
    Swarm.Game.Entity.Cosmetic
    Swarm.Game.Entity.Cosmetic.Assignment
    Swarm.Game.Ingredients
    Swarm.Game.Land
    Swarm.Game.Recipe
    Swarm.Game.Recipe.Graph
    Swarm.Game.Robot
    Swarm.Game.Robot.Walk
    Swarm.Game.Scenario
    Swarm.Game.Scenario.Objective
    Swarm.Game.Scenario.Objective.Graph
    Swarm.Game.Scenario.Objective.Logic
    Swarm.Game.Scenario.Objective.Validation
    Swarm.Game.Scenario.RobotLookup
    Swarm.Game.Scenario.Style
    Swarm.Game.Scenario.Topography.Cell
    Swarm.Game.Scenario.Topography.Center
    Swarm.Game.Scenario.Topography.EntityFacade
    Swarm.Game.Scenario.Topography.Navigation.Portal
    Swarm.Game.Scenario.Topography.WorldDescription
    Swarm.Game.Scenario.Topography.WorldPalette
    Swarm.Game.State.Config
    Swarm.Game.State.Landscape
    Swarm.Game.Terrain
    Swarm.Game.World
    Swarm.Game.World.Abstract
    Swarm.Game.World.Compile
    Swarm.Game.World.Eval
    Swarm.Game.World.Gen
    Swarm.Game.World.Interpret
    Swarm.Game.World.Load
    Swarm.Game.World.Parse
    Swarm.Game.World.Render
    Swarm.Game.World.Syntax
    Swarm.Game.World.Typecheck
    Swarm.Util.Content

  other-modules: Paths_swarm
  autogen-modules: Paths_swarm
  build-depends:
    swarm:swarm-lang,
    swarm:swarm-topography,
    swarm:swarm-util,

  hs-source-dirs: src/swarm-scenario
  ghc-options:
    -hiedir=.hie/src/swarm-scenario

  default-language: Haskell2010
  default-extensions:
    -- Avoid unexpected unevaluated thunk buildup
    -- See discussion in #415
    StrictData

library swarm-engine
  import:
    stan-config, common, ghc2021-extensions,
    SHA,
    aeson,
    array,
    astar,
    base,
    boolexpr,
    clock,
    containers,
    directory,
    extra,
    filepath,
    fused-effects,
    fused-effects-lens,
    lens,
    linear,
    megaparsec,
    monoidmap,
    mtl,
    nonempty-containers,
    ordered-containers,
    prettyprinter,
    random,
    servant-docs,
    text,
    time,
    hashable,
    transformers,
    unordered-containers,
    witch,
    yaml,

  visibility: public
  -- cabal-gild: discover src/swarm-engine
  exposed-modules:
    Swarm.Effect
    Swarm.Effect.Time
    Swarm.Game.Achievement.Attainment
    Swarm.Game.Achievement.Description
    Swarm.Game.Achievement.Persistence
    Swarm.Game.CESK
    Swarm.Game.Exception
    Swarm.Game.Popup
    Swarm.Game.Robot.Activity
    Swarm.Game.Robot.Concrete
    Swarm.Game.Scenario.Objective.WinCheck
    Swarm.Game.Scenario.Scoring.Best
    Swarm.Game.Scenario.Scoring.CodeSize
    Swarm.Game.Scenario.Scoring.ConcreteMetrics
    Swarm.Game.Scenario.Scoring.GenericMetrics
    Swarm.Game.Scenario.Status
    Swarm.Game.Scenario.Topography.Navigation.Util
    Swarm.Game.ScenarioInfo
    Swarm.Game.State
    Swarm.Game.State.Initialize
    Swarm.Game.State.Robot
    Swarm.Game.State.Runtime
    Swarm.Game.State.Substate
    Swarm.Game.Step
    Swarm.Game.Step.Arithmetic
    Swarm.Game.Step.Combustion
    Swarm.Game.Step.Const
    Swarm.Game.Step.Flood
    Swarm.Game.Step.Path.Cache
    Swarm.Game.Step.Path.Cache.DistanceLimit
    Swarm.Game.Step.Path.Finding
    Swarm.Game.Step.Path.Type
    Swarm.Game.Step.Path.Walkability
    Swarm.Game.Step.RobotStepState
    Swarm.Game.Step.Util
    Swarm.Game.Step.Util.Command
    Swarm.Game.Step.Util.Inspect
    Swarm.Game.Step.Validate
    Swarm.Game.Tick
    Swarm.Game.Value
    Swarm.Log

  other-modules: Paths_swarm
  autogen-modules: Paths_swarm
  build-depends:
    swarm:swarm-lang,
    swarm:swarm-scenario,
    swarm:swarm-topography,
    swarm:swarm-util,

  hs-source-dirs: src/swarm-engine
  ghc-options:
    -hiedir=.hie/src/swarm-engine

  default-language: Haskell2010
  default-extensions:
    -- Avoid unexpected unevaluated thunk buildup
    -- See discussion in #415
    StrictData

library swarm-web
  import:
    stan-config, common, ghc2021-extensions,
    aeson,
    base,
    bytestring,
    colour,
    commonmark,
    containers,
    http-types,
    lens,
    nonempty-containers,
    palette,
    servant,
    servant-docs,
    servant-server,
    text,
    wai,
    wai-app-static,
    warp,
    dotgen,
    witch,

  visibility: public
  -- cabal-gild: discover src/swarm-web
  exposed-modules:
    Swarm.Web
    Swarm.Web.GraphRender
    Swarm.Web.Worldview

  other-modules: Paths_swarm
  autogen-modules: Paths_swarm
  build-depends:
    swarm:swarm-engine,
    swarm:swarm-lang,
    swarm:swarm-scenario,
    swarm:swarm-topography,
    swarm:swarm-tui,
    swarm:swarm-util,

  hs-source-dirs: src/swarm-web
  ghc-options:
    -hiedir=.hie/src/swarm-web

  default-language: Haskell2010
  default-extensions:
    -- Avoid unexpected unevaluated thunk buildup
    -- See discussion in #415
    StrictData

library swarm-tournament
  import:
    stan-config, common, ghc2021-extensions,
    SHA,
    aeson,
    base,
    bytestring,
    commonmark,
    containers,
    cookie,
    exceptions,
    extra,
    fused-effects,
    http-client,
    http-client-tls,
    http-types,
    lens,
    mtl,
    JuicyPixels,
    servant-JuicyPixels,
    servant-docs,
    servant-multipart,
    servant-server,
    sqlite-simple,
    text,
    time,
    transformers,
    utf8-string,
    wai,
    wai-app-static,
    wai-extra,
    warp,
    yaml,

  visibility: public
  -- cabal-gild: discover src/swarm-tournament
  exposed-modules:
    Swarm.Web.Auth
    Swarm.Web.Tournament
    Swarm.Web.Tournament.Database.Query
    Swarm.Web.Tournament.Type
    Swarm.Web.Tournament.Validate
    Swarm.Web.Tournament.Validate.FailureMode
    Swarm.Web.Tournament.Validate.Upload

  other-modules: Paths_swarm
  autogen-modules: Paths_swarm
  build-depends:
    swarm:swarm-engine,
    swarm:swarm-lang,
    swarm:swarm-scenario,
    swarm:swarm-util,

  hs-source-dirs: src/swarm-tournament
  ghc-options:
    -hiedir=.hie/src/swarm-tournament

  default-language: Haskell2010

library swarm-util
  import:
    stan-config, common, ghc2021-extensions,
    aeson,
    array,
    base,
    boolexpr,
    clock,
    containers,
    data-fix,
    directory,
    either,
    extra,
    filepath,
    free,
    fused-effects,
    hashable,
    lens,
    megaparsec,
    minimorph,
    mtl,
    prettyprinter,
    servant-docs,
    template-haskell,
    text,
    transformers,
    vector,
    witch,
    witherable,
    yaml,

  visibility: public
  -- cabal-gild: discover src/swarm-util
  exposed-modules:
    Data.BoolExpr.Simplify
    Swarm.Failure
    Swarm.Language.Syntax.Direction
    Swarm.Pretty
    Swarm.ResourceLoading
    Swarm.Util
    Swarm.Util.Effect
    Swarm.Util.Erasable
    Swarm.Util.Graph
    Swarm.Util.JSON
    Swarm.Util.Lens
    Swarm.Util.OccurrenceEncoder
    Swarm.Util.RingBuffer
    Swarm.Util.UnitInterval
    Swarm.Util.WindowedCounter
    Swarm.Util.Yaml

  other-modules: Paths_swarm
  autogen-modules: Paths_swarm
  hs-source-dirs: src/swarm-util
  ghc-options:
    -hiedir=.hie/src/swarm-util

  default-language: Haskell2010
  default-extensions:
    -- Avoid unexpected unevaluated thunk buildup
    -- See discussion in #415
    StrictData

library swarm-doc
  import:
    stan-config, common, ghc2021-extensions,
    aeson,
    base,
    containers,
    directory,
    dotgen,
    extra,
    filepath,
    fused-effects,
    lens,
    mtl,
    pandoc,
    pandoc-types,
    scientific,
    servant-docs,
    text,
    transformers,
    vector,

  visibility: public
  -- cabal-gild: discover src/swarm-doc
  exposed-modules:
    Swarm.Doc.Command
    Swarm.Doc.Gen
    Swarm.Doc.Keyword
    Swarm.Doc.Pedagogy
    Swarm.Doc.Schema.Arrangement
    Swarm.Doc.Schema.Parse
    Swarm.Doc.Schema.Refined
    Swarm.Doc.Schema.Render
    Swarm.Doc.Schema.SchemaType
    Swarm.Doc.Util
    Swarm.Doc.Wiki.Cheatsheet
    Swarm.Doc.Wiki.Matrix
    Swarm.Doc.Wiki.Util

  build-depends:
    swarm:swarm-engine,
    swarm:swarm-lang,
    swarm:swarm-scenario,
    swarm:swarm-util,

  hs-source-dirs: src/swarm-doc
  ghc-options:
    -hiedir=.hie/src/swarm-doc

  default-language: Haskell2010
  default-extensions:
    -- Avoid unexpected unevaluated thunk buildup
    -- See discussion in #415
    StrictData

library swarm-tui
  import:
    stan-config, common, ghc2021-extensions,
    aeson,
    array,
    base,
    brick,
    brick-list-skip,
    brick-tabular-list,
    bytestring,
    clock,
    prettyprinter,
    colour,
    containers,
    extra,
    filepath,
    fused-effects,
    fuzzy,
    generic-data,
    githash,
    lens,
    linear,
    mtl,
    murmur3,
    natural-sort,
    nonempty-containers,
    palette,
    servant-docs,
    split,
    tagged,
    text,
    text-zipper,
    time,
    transformers,
    vector,
    vty,
    warp,
    witch,
    word-wrap,
    yaml,

  visibility: public
  -- cabal-gild: discover src/swarm-tui
  exposed-modules:
    Swarm.TUI.Border
    Swarm.TUI.Controller
    Swarm.TUI.Controller.EventHandlers
    Swarm.TUI.Controller.EventHandlers.Frame
    Swarm.TUI.Controller.EventHandlers.Main
    Swarm.TUI.Controller.EventHandlers.REPL
    Swarm.TUI.Controller.EventHandlers.Robot
    Swarm.TUI.Controller.EventHandlers.World
    Swarm.TUI.Controller.SaveScenario
    Swarm.TUI.Controller.UpdateUI
    Swarm.TUI.Controller.Util
    Swarm.TUI.Editor.Controller
    Swarm.TUI.Editor.Json
    Swarm.TUI.Editor.Masking
    Swarm.TUI.Editor.Model
    Swarm.TUI.Editor.Palette
    Swarm.TUI.Editor.Util
    Swarm.TUI.Editor.View
    Swarm.TUI.Inventory.Sorting
    Swarm.TUI.Launch.Controller
    Swarm.TUI.Launch.Model
    Swarm.TUI.Launch.Prep
    Swarm.TUI.Launch.View
    Swarm.TUI.List
    Swarm.TUI.Model
    Swarm.TUI.Model.Achievements
    Swarm.TUI.Model.DebugOption
    Swarm.TUI.Model.Dialog
    Swarm.TUI.Model.Dialog.Goal
    Swarm.TUI.Model.Dialog.Structure
    Swarm.TUI.Model.Event
    Swarm.TUI.Model.KeyBindings
    Swarm.TUI.Model.Menu
    Swarm.TUI.Model.Name
    Swarm.TUI.Model.Repl
    Swarm.TUI.Model.StateUpdate
    Swarm.TUI.Model.UI
    Swarm.TUI.Model.UI.Gameplay
    Swarm.TUI.Model.WebCommand
    Swarm.TUI.Panel
    Swarm.TUI.View
    Swarm.TUI.View.Achievement
    Swarm.TUI.View.Attribute.Attr
    Swarm.TUI.View.Attribute.CustomStyling
    Swarm.TUI.View.Attribute.Util
    Swarm.TUI.View.CellDisplay
    Swarm.TUI.View.Logo
    Swarm.TUI.View.Objective
    Swarm.TUI.View.Popup
    Swarm.TUI.View.Robot
    Swarm.TUI.View.Robot.Details
    Swarm.TUI.View.Robot.Type
    Swarm.TUI.View.Shared
    Swarm.TUI.View.Structure
    Swarm.TUI.View.Util

  other-modules: Paths_swarm
  autogen-modules: Paths_swarm
  build-depends:
    swarm:swarm-engine,
    swarm:swarm-lang,
    swarm:swarm-scenario,
    swarm:swarm-topography,
    swarm:swarm-util,

  hs-source-dirs: src/swarm-tui
  ghc-options:
    -hiedir=.hie/src/swarm-tui

  default-language: Haskell2010
  default-extensions:
    -- Avoid unexpected unevaluated thunk buildup
    -- See discussion in #415
    StrictData

executable swarm
  import:
    stan-config, common, ghc2021-extensions,
    aeson,
    base,
    brick,
    bytestring,
    containers,
    extra,
    fused-effects,
    githash,
    http-client,
    http-client-tls,
    http-types,
    lens,
    optparse-applicative,
    text,
    vty,
    vty-crossplatform,
    yaml,

  build-depends:
    swarm:swarm-engine,
    swarm:swarm-lang,
    swarm:swarm-tui,
    swarm:swarm-util,
    swarm:swarm-web,

  main-is: Main.hs
  autogen-modules: Paths_swarm
  other-modules:
    Paths_swarm
    Swarm.App
    Swarm.Version

  hs-source-dirs: app/game
  ghc-options:
    -hiedir=.hie/app/game

  default-language: Haskell2010
  ghc-options: -threaded
  default-extensions: ImportQualifiedPost

executable swarm-scene
  import:
    stan-config, common, ghc2021-extensions,
    base,
    optparse-applicative,

  main-is: Main.hs
  build-depends:
    swarm:swarm-scenario,
    swarm:swarm-topography,

  hs-source-dirs: app/scene
  ghc-options:
    -hiedir=.hie/app/scene

  default-language: Haskell2010
  ghc-options: -threaded
  default-extensions: ImportQualifiedPost

executable swarm-docs
  import:
    stan-config, common, ghc2021-extensions,
    base,
    optparse-applicative,
    text,

  build-depends:
    swarm:swarm-doc

  main-is: Main.hs
  other-modules:
  hs-source-dirs: app/doc
  ghc-options:
    -hiedir=.hie/app/doc

  default-language: Haskell2010
  ghc-options: -threaded
  default-extensions: ImportQualifiedPost

executable swarm-host-tournament
  import:
    stan-config, common, ghc2021-extensions,
    base,
    optparse-applicative,
    sqlite-simple,
    transformers,
    warp,
    yaml,

  main-is: Main.hs
  build-depends:
    swarm:swarm-engine,
    swarm:swarm-tournament,

  hs-source-dirs: app/tournament
  ghc-options:
    -hiedir=.hie/app/tournament

  default-language: Haskell2010
  ghc-options: -threaded
  default-extensions: ImportQualifiedPost

test-suite swarm-unit
  import:
    stan-config, common, ghc2021-extensions,
    QuickCheck,
    aeson,
    base,
    boolexpr,
    containers,
    data-fix,
    filepath,
    hashable,
    lens,
    megaparsec,
    mtl,
    quickcheck-instances,
    tasty,
    tasty-hunit,
    tasty-quickcheck,
    text,
    time,
    vty,
    witch,
    yaml,

  main-is: Main.hs
  type: exitcode-stdio-1.0
  other-modules:
    TestBoolExpr
    TestCommand
    TestContext
    TestEval
    TestInventory
    TestLSP
    TestLanguagePipeline
    TestNotification
    TestOrdering
    TestOverlay
    TestParse
    TestPedagogy
    TestPretty
    TestQQ
    TestRepl
    TestRequirements
    TestScoring
    TestUtil

  build-depends:
    swarm:swarm-doc,
    swarm:swarm-engine,
    swarm:swarm-lang,
    swarm:swarm-scenario,
    swarm:swarm-topography,
    swarm:swarm-tui,
    swarm:swarm-util,

  hs-source-dirs: test/unit
  ghc-options:
    -hiedir=.hie/test/unit

  default-language: Haskell2010
  ghc-options: -threaded

test-suite swarm-integration
  import:
    stan-config, common, ghc2021-extensions,
    base,
    containers,
    filepath,
    fused-effects,
    lens,
    mtl,
    tasty,
    tasty-expected-failure,
    tasty-hunit,
    text,
    witch,
    yaml,

  main-is: Main.hs
  other-modules:
    TestFormat
    TestRecipeCoverage

  type: exitcode-stdio-1.0
  build-depends:
    swarm:swarm-doc,
    swarm:swarm-engine,
    swarm:swarm-lang,
    swarm:swarm-scenario,
    swarm:swarm-tui,
    swarm:swarm-util,

  hs-source-dirs: test/integration
  ghc-options:
    -hiedir=.hie/test/integration

  default-language: Haskell2010
  ghc-options: -threaded

test-suite tournament-host
  import:
    stan-config, common, ghc2021-extensions,
    SHA,
    base,
    bytestring,
    http-client,
    http-types,
    nonempty-containers,
    tasty,
    tasty-hunit,
    warp,

  main-is: Main.hs
  type: exitcode-stdio-1.0
  build-depends:
    swarm:swarm-engine,
    swarm:swarm-tournament,

  hs-source-dirs: test/tournament-host
  ghc-options:
    -hiedir=.hie/test/tournament-host

  default-language: Haskell2010
  ghc-options: -threaded

test-suite standalone-topography
  import:
    stan-config, common, ghc2021-extensions,
    JuicyPixels,
    MissingH,
    base,
    bytestring,
    filepath,
    tasty,
    tasty-hunit,
    yaml,

  main-is: Main.hs
  type: exitcode-stdio-1.0
  other-modules:
    Lib

  other-modules: Paths_swarm
  autogen-modules: Paths_swarm
  build-depends:
    swarm:swarm-scenario,
    swarm:swarm-topography,
    swarm:swarm-util,

  hs-source-dirs: test/standalone-topography/src
  ghc-options:
    -hiedir=.hie/test/standalone-topography/src

  default-language: Haskell2010
  ghc-options: -threaded

benchmark benchmark
  import:
    stan-config, common, ghc2021-extensions,
    base,
    containers,
    extra,
    lens,
    mtl,
    tasty-bench,
    text,

  main-is: Benchmark.hs
  hs-source-dirs: test/bench
  ghc-options:
    -hiedir=.hie/test/bench

  type: exitcode-stdio-1.0
  build-depends:
    fused-effects,
    swarm:swarm-engine,
    swarm:swarm-lang,
    swarm:swarm-scenario,
    swarm:swarm-topography,
    swarm:swarm-util,

  default-language: Haskell2010
  ghc-options:
    -threaded
    -with-rtsopts=-A32m
    -fproc-alignment=64