packages feed

swarm-0.6.0.0: swarm.cabal

cabal-version: 3.6
name: swarm
version: 0.6.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-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.2.8 || ==9.4.8 || ==9.6.5 || ==9.8.2
extra-source-files:
  CHANGELOG.md
  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/standalone-topography/*.png
  test/standalone-topography/*.yaml
  worlds/*.world

source-repository head
  type: git
  location: git://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
    -hiedir=.hie

-- 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

library swarm-lang
  import: stan-config, common, ghc2021-extensions
  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.Pipeline
    Swarm.Language.Pipeline.QQ
    Swarm.Language.Pretty
    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.Util
    Swarm.Language.Text.Markdown
    Swarm.Language.Typecheck
    Swarm.Language.Typed
    Swarm.Language.Types
    Swarm.Language.Value

  other-modules: Paths_swarm
  autogen-modules: Paths_swarm
  build-depends:
    aeson,
    base,
    commonmark >=0.2 && <0.3,
    commonmark-extensions >=0.2 && <0.3,
    containers,
    data-fix >=0.3 && <0.4,
    deriving-compat >=0.6 && <0.7,
    extra,
    free >=5.2 && <5.3,
    fused-effects,
    hashable,
    lens,
    lsp >=2.4 && <2.7,
    megaparsec,
    mtl,
    parser-combinators,
    prettyprinter,
    split,
    syb >=0.7 && <0.8,
    template-haskell,
    terminal-size >=0.3 && <1.0,
    text,
    text-rope >=0.2 && <0.3,
    unicode-show >=0.1 && <0.2,
    vector,
    vty,
    witch,
    yaml,

  build-depends: swarm:swarm-util
  hs-source-dirs: 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
  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.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.Overlay
    Swarm.Game.Scenario.Topography.Structure.Recognition
    Swarm.Game.Scenario.Topography.Structure.Recognition.Log
    Swarm.Game.Scenario.Topography.Structure.Recognition.Prep
    Swarm.Game.Scenario.Topography.Structure.Recognition.Registry
    Swarm.Game.Scenario.Topography.Structure.Recognition.Symmetry
    Swarm.Game.Scenario.Topography.Structure.Recognition.Type
    Swarm.Game.Universe
    Swarm.Game.World.Coords

  other-modules: Paths_swarm
  autogen-modules: Paths_swarm
  build-depends:
    AhoCorasick >=0.0.4 && <0.0.5,
    JuicyPixels >=3.3 && <3.4,
    aeson >=2.2 && <2.3,
    array,
    base >=4.14 && <4.20,
    containers >=0.6.2 && <0.8,
    extra >=1.7 && <1.8,
    hashable,
    lens,
    linear >=1.21.6 && <1.24,
    nonempty-containers >=0.3.4 && <0.3.5,
    servant-docs >=0.12 && <0.14,
    text >=1.2.4 && <2.2,
    unordered-containers,
    vector >=0.12 && <0.14,
    yaml >=0.11 && <0.11.12.0,

  build-depends:
    swarm:swarm-util

  hs-source-dirs: 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
  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.Failure
    Swarm.Game.Ingredients
    Swarm.Game.Land
    Swarm.Game.Recipe
    Swarm.Game.ResourceLoading
    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.Structure.Recognition.Precompute
    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.Modify
    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:
    JuicyPixels >=3.3 && <3.4,
    aeson >=2.2 && <2.3,
    array >=0.5.4 && <0.6,
    base >=4.14 && <4.20,
    boolexpr >=0.2 && <0.3,
    bytestring >=0.10 && <0.13,
    clock >=0.8.2 && <0.9,
    colour >=2.3.6 && <2.4,
    containers >=0.6.2 && <0.8,
    directory >=1.3 && <1.4,
    either >=5.0 && <5.1,
    extra >=1.7 && <1.8,
    filepath >=1.4 && <1.5,
    fused-effects >=1.1.1.1 && <1.2,
    hashable >=1.3.4 && <1.5,
    hsnoise >=0.0.3 && <0.1,
    lens >=4.19 && <5.4,
    linear >=1.21.6 && <1.24,
    megaparsec >=9.6.1 && <9.7,
    murmur3 >=1.0.4 && <1.1,
    palette >=0.3 && <0.4,
    parser-combinators >=1.2 && <1.4,
    prettyprinter >=1.7.0 && <1.8,
    random >=1.2.0 && <1.3,
    servant-docs >=0.12 && <0.14,
    simple-enumeration >=0.2 && <0.3,
    tagged >=0.8 && <0.9,
    text >=1.2.4 && <2.2,
    vector >=0.12 && <0.14,
    vty >=6.1 && <6.3,
    witch >=1.1.1.0 && <1.3,
    yaml >=0.11 && <0.11.12.0,

  build-depends:
    swarm:swarm-lang,
    swarm:swarm-topography,
    swarm:swarm-util,

  hs-source-dirs: 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
  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.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.Scenario.Topography.Structure.Recognition.Tracking
    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
    Swarm.Version

  other-modules: Paths_swarm
  autogen-modules: Paths_swarm
  build-depends:
    AhoCorasick >=0.0.4 && <0.0.5,
    SHA >=1.6.4 && <1.6.5,
    aeson >=2.2 && <2.3,
    array >=0.5.4 && <0.6,
    astar >=0.3 && <0.3.1,
    base >=4.14 && <4.20,
    boolexpr >=0.2 && <0.3,
    bytestring,
    clock >=0.8.2 && <0.9,
    containers >=0.6.2 && <0.8,
    directory >=1.3 && <1.4,
    extra >=1.7 && <1.8,
    filepath >=1.4 && <1.5,
    fused-effects >=1.1.1.1 && <1.2,
    fused-effects-lens >=1.2.0.1 && <1.3,
    githash,
    hashable >=1.3.4 && <1.5,
    http-client >=0.7 && <0.8,
    http-client-tls >=0.3 && <0.4,
    http-types >=0.12 && <0.13,
    lens >=4.19 && <5.4,
    linear >=1.21.6 && <1.24,
    megaparsec >=9.6 && <9.7,
    mtl >=2.2.2 && <2.4,
    nonempty-containers >=0.3.4 && <0.3.5,
    prettyprinter >=1.7.0 && <1.8,
    random >=1.2.0 && <1.3,
    servant-docs >=0.12 && <0.14,
    text >=1.2.4 && <2.2,
    time >=1.9 && <1.15,
    transformers >=0.5 && <0.7,
    unordered-containers >=0.2.14 && <0.3,
    warp,
    witch >=1.1.1.0 && <1.3,
    yaml >=0.11 && <0.11.12.0,

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

  hs-source-dirs: 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
  visibility: public
  -- cabal-gild: discover src/swarm-web
  exposed-modules:
    Swarm.Web
    Swarm.Web.Worldview

  other-modules: Paths_swarm
  autogen-modules: Paths_swarm
  build-depends:
    aeson,
    base,
    brick,
    bytestring,
    colour,
    commonmark,
    containers,
    http-types,
    lens,
    nonempty-containers,
    palette,
    servant-docs,
    servant-server >=0.19 && <0.21,
    text,
    wai >=3.2 && <3.3,
    wai-app-static >=3.1.8 && <3.2,
    warp,
    witch,

  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: 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
  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:
    SHA,
    aeson,
    base,
    bytestring,
    commonmark,
    containers,
    cookie,
    exceptions,
    extra,
    fused-effects,
    http-client,
    http-client-tls >=0.3.6.3 && <0.3.7,
    http-types,
    lens,
    mtl,
    servant-docs,
    servant-multipart,
    servant-server >=0.19 && <0.21,
    sqlite-simple >=0.4.19.0 && <0.4.20,
    text,
    time,
    transformers,
    utf8-string,
    wai >=3.2 && <3.3,
    wai-app-static >=3.1.8 && <3.2,
    wai-extra,
    warp,
    yaml,

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

  hs-source-dirs: src/swarm-tournament
  default-language: Haskell2010

library swarm-util
  import: stan-config, common, ghc2021-extensions
  visibility: public
  -- cabal-gild: discover src/swarm-util
  exposed-modules:
    Control.Carrier.Accum.FixedStrict
    Data.BoolExpr.Simplify
    Swarm.Language.Syntax.Direction
    Swarm.Util
    Swarm.Util.Effect
    Swarm.Util.Erasable
    Swarm.Util.JSON
    Swarm.Util.Lens
    Swarm.Util.OccurrenceEncoder
    Swarm.Util.ReadableIORef
    Swarm.Util.RingBuffer
    Swarm.Util.UnitInterval
    Swarm.Util.WindowedCounter
    Swarm.Util.Yaml

  other-modules: Paths_swarm
  autogen-modules: Paths_swarm
  build-depends:
    aeson >=2.2 && <2.3,
    base >=4.14 && <4.20,
    boolexpr >=0.2 && <0.3,
    clock >=0.8.2 && <0.9,
    containers >=0.6.2 && <0.8,
    directory >=1.3 && <1.4,
    either >=5.0 && <5.1,
    extra >=1.7 && <1.8,
    filepath >=1.4 && <1.5,
    fused-effects >=1.1.1.1 && <1.2,
    hashable >=1.3.4 && <1.5,
    lens >=4.19 && <5.4,
    minimorph >=0.3 && <0.4,
    mtl >=2.2.2 && <2.4,
    servant-docs >=0.12 && <0.14,
    template-haskell >=2.16 && <2.22,
    text >=1.2.4 && <2.2,
    transformers >=0.5 && <0.7,
    vector >=0.12 && <0.14,
    witch >=1.1.1.0 && <1.3,
    witherable >=0.4 && <0.5,
    yaml >=0.11 && <0.11.12.0,

  hs-source-dirs: 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
  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:
    aeson >=2.2 && <2.3,
    base >=4.14 && <4.20,
    containers >=0.6.2 && <0.8,
    directory >=1.3 && <1.4,
    dotgen >=0.4 && <0.5,
    extra >=1.7 && <1.8,
    filepath >=1.4 && <1.5,
    fused-effects >=1.1.1.1 && <1.2,
    lens >=4.19 && <5.4,
    mtl >=2.2.2 && <2.4,
    pandoc >=3.0 && <3.2,
    pandoc-types >=1.23 && <1.24,
    scientific >=0.3.6 && <0.3.8,
    servant-docs >=0.12 && <0.14,
    text >=1.2.4 && <2.2,
    transformers >=0.5 && <0.7,
    vector >=0.12 && <0.14,

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

  hs-source-dirs: 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
  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.Event
    Swarm.TUI.Model.Goal
    Swarm.TUI.Model.KeyBindings
    Swarm.TUI.Model.Menu
    Swarm.TUI.Model.Name
    Swarm.TUI.Model.Popup
    Swarm.TUI.Model.Repl
    Swarm.TUI.Model.StateUpdate
    Swarm.TUI.Model.Structure
    Swarm.TUI.Model.UI
    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.Structure
    Swarm.TUI.View.Util

  other-modules: Paths_swarm
  autogen-modules: Paths_swarm
  build-depends:
    aeson >=2.2 && <2.3,
    array >=0.5.4 && <0.6,
    base >=4.14 && <4.20,
    brick >=2.1.1 && <2.5,
    brick-list-skip >=0.1.1.2 && <0.2,
    bytestring >=0.10 && <0.13,
    clock >=0.8.2 && <0.9,
    colour >=2.3.6 && <2.4,
    containers >=0.6.2 && <0.8,
    extra >=1.7 && <1.8,
    filepath >=1.4 && <1.5,
    fused-effects >=1.1.1.1 && <1.2,
    fuzzy >=0.1 && <0.2,
    githash >=0.1.6 && <0.2,
    lens >=4.19 && <5.4,
    linear >=1.21.6 && <1.24,
    mtl >=2.2.2 && <2.4,
    murmur3 >=1.0.4 && <1.1,
    natural-sort >=0.1.2 && <0.2,
    nonempty-containers >=0.3.4 && <0.3.5,
    palette >=0.3 && <0.4,
    servant-docs >=0.12 && <0.14,
    split >=0.2.3 && <0.3,
    tagged >=0.8 && <0.9,
    text >=1.2.4 && <2.2,
    text-zipper >=0.10 && <0.14,
    time >=1.9 && <1.15,
    transformers >=0.5 && <0.7,
    vector >=0.12 && <0.14,
    vty >=6.1 && <6.3,
    warp >=3.2 && <3.5,
    witch >=1.1.1.0 && <1.3,
    word-wrap >=0.5 && <0.6,
    yaml >=0.11 && <0.11.12.0,

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

  hs-source-dirs: src/swarm-tui
  default-language: Haskell2010
  default-extensions:
    -- Avoid unexpected unevaluated thunk buildup
    -- See discussion in #415
    StrictData

executable swarm
  import: stan-config, common
  main-is: Main.hs
  other-modules: Swarm.App
  build-depends:
    -- Imports shared with the library don't need bounds
    base,
    brick,
    fused-effects,
    githash >=0.1.6 && <0.2,
    lens,
    optparse-applicative >=0.16 && <0.19,
    swarm:swarm-engine,
    swarm:swarm-lang,
    swarm:swarm-scenario,
    swarm:swarm-tui,
    swarm:swarm-util,
    swarm:swarm-web,
    text,
    vty,
    vty-crossplatform >=0.4 && <0.5,

  hs-source-dirs: app
  default-language: Haskell2010
  ghc-options: -threaded
  default-extensions: ImportQualifiedPost

executable swarm-scene
  import: stan-config, common, ghc2021-extensions
  main-is: Main.hs
  build-depends:
    base,
    optparse-applicative >=0.16 && <0.19,

  build-depends:
    swarm:swarm-scenario,
    swarm:swarm-topography,

  hs-source-dirs: app/scene
  default-language: Haskell2010
  ghc-options: -threaded
  default-extensions: ImportQualifiedPost

executable swarm-docs
  import: stan-config, common, ghc2021-extensions
  main-is: Main.hs
  other-modules:
  build-depends:
    -- Imports shared with the library don't need bounds
    base,
    optparse-applicative >=0.16 && <0.19,
    swarm:swarm-doc,
    text,

  hs-source-dirs: app/doc
  default-language: Haskell2010
  ghc-options: -threaded
  default-extensions: ImportQualifiedPost

executable swarm-host-tournament
  import: stan-config, common, ghc2021-extensions
  main-is: Main.hs
  build-depends:
    base,
    optparse-applicative >=0.16 && <0.19,
    sqlite-simple,
    transformers,
    warp,
    yaml,

  build-depends:
    swarm:swarm-engine,
    swarm:swarm-tournament,

  hs-source-dirs: app/tournament
  default-language: Haskell2010
  ghc-options: -threaded
  default-extensions: ImportQualifiedPost

test-suite swarm-unit
  import: stan-config, common, ghc2021-extensions
  main-is: Main.hs
  type: exitcode-stdio-1.0
  other-modules:
    TestBoolExpr
    TestCommand
    TestEval
    TestInventory
    TestLSP
    TestLanguagePipeline
    TestNotification
    TestOrdering
    TestOverlay
    TestParse
    TestPedagogy
    TestPretty
    TestRepl
    TestRequirements
    TestScoring
    TestUtil

  build-depends:
    -- Imports shared with the library don't need bounds
    QuickCheck >=2.14 && <2.16,
    aeson,
    base,
    boolexpr,
    containers,
    data-fix,
    filepath,
    hashable,
    lens,
    megaparsec,
    mtl,
    tasty >=0.10 && <1.6,
    tasty-hunit >=0.10 && <0.11,
    tasty-quickcheck >=0.10 && <0.11,
    text,
    time,
    vty,
    witch,

  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
  default-language: Haskell2010
  ghc-options: -threaded

test-suite swarm-integration
  import: stan-config, common, ghc2021-extensions
  main-is: Main.hs
  other-modules: TestRecipeCoverage
  type: exitcode-stdio-1.0
  build-depends:
    -- Imports shared with the library don't need bounds
    base,
    containers,
    filepath,
    fused-effects,
    lens,
    mtl,
    tasty >=0.10 && <1.6,
    tasty-expected-failure >=0.12 && <0.13,
    tasty-hunit >=0.10 && <0.11,
    text,
    witch,
    yaml,

  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
  default-language: Haskell2010
  ghc-options: -threaded

test-suite tournament-host
  import: stan-config, common, ghc2021-extensions
  main-is: Main.hs
  type: exitcode-stdio-1.0
  build-depends:
    SHA,
    base,
    bytestring,
    http-client,
    http-types,
    nonempty-containers,
    tasty,
    tasty-hunit,
    warp,

  build-depends:
    swarm:swarm-engine,
    swarm:swarm-tournament,

  hs-source-dirs: test/tournament-host
  default-language: Haskell2010
  ghc-options: -threaded

test-suite standalone-topography
  import: stan-config, common, ghc2021-extensions
  main-is: Main.hs
  type: exitcode-stdio-1.0
  other-modules:
    Lib

  other-modules: Paths_swarm
  autogen-modules: Paths_swarm
  build-depends:
    JuicyPixels >=3.3 && <3.4,
    MissingH,
    aeson,
    base,
    bytestring,
    filepath,
    tasty,
    tasty-hunit,
    yaml,

  build-depends:
    swarm:swarm-topography,
    swarm:swarm-util,

  hs-source-dirs: test/standalone-topography/src
  default-language: Haskell2010
  ghc-options: -threaded

benchmark benchmark
  import: stan-config, common, ghc2021-extensions
  main-is: Benchmark.hs
  hs-source-dirs: test/bench
  type: exitcode-stdio-1.0
  build-depends:
    base,
    containers,
    extra,
    lens,
    mtl,
    tasty-bench >=0.3.1 && <0.4,
    text,

  build-depends:
    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