packages feed

Cabal revisions of LambdaHack-0.8.1.1

Hackage metadata revisions edit the .cabal file after upload; each diff below is one revision.

revision 1
-name:           LambdaHack--- The package version. See the Haskell package versioning policy (PVP)--- for standards guiding when and how versions should be incremented.--- http://www.haskell.org/haskellwiki/Package_versioning_policy--- PVP summary:+-+------- breaking API changes---             | | +----- minor or non-breaking API additions---             | | | +--- code changes with no API change-version:       0.8.1.1-synopsis:      A game engine library for tactical squad ASCII roguelike dungeon crawlers-description:   LambdaHack is a Haskell game engine library for ASCII roguelike-               games of arbitrary theme, size and complexity, with optional-               tactical squad combat. It's packaged together with a sample-               dungeon crawler in fantasy setting that can be tried out-               in the browser: <http://lambdahack.github.io>-               (It runs fastest on Chrome. Keyboard commands and savefiles-               are supported only on recent enough versions of browsers.-               Mouse should work everywhere.)-               .-               Please see the changelog file for recent improvements-               and the issue tracker for short-term plans. Long term goals-               include multiplayer tactical squad combat, in-game content-               creation, auto-balancing and persistent content modification-               based on player behaviour. Contributions are welcome.-               .-               Games known to use the LambdaHack library:-               .-               * Allure of the Stars, a near-future Sci-Fi game,-               <http://hackage.haskell.org/package/Allure>-               .-               * Space Privateers, an adventure game set in far future,-               <http://hackage.haskell.org/package/SpacePrivateers>-               .-               Note: All modules in this library are kept visible,-               to let games override and reuse them.-               OTOH, to reflect that some modules are implementation details-               relative to others, the source code adheres to the following-               convention. If a module has the same name as a directory,-               the module is the exclusive interface to the directory.-               No references to the modules in the directory are allowed-               except from the interface module. This policy is only binding-               when developing the library --- library users are free-               to access any modules, since the library authors are in-               no position to guess their particular needs.-homepage:      https://lambdahack.github.io-bug-reports:   http://github.com/LambdaHack/LambdaHack/issues-license:       BSD3-license-file:  COPYLEFT-tested-with:   GHC==8.0.2, GHC==8.2.2, GHC==8.4.3-data-files:    GameDefinition/config.ui.default,-               GameDefinition/fonts/16x16x.fon,-               GameDefinition/fonts/8x8xb.fon,-               GameDefinition/fonts/8x8x.fon,-               GameDefinition/fonts/LICENSE.16x16x,-               GameDefinition/fonts/Fix15Mono-Bold.woff,-               GameDefinition/fonts/LICENSE.Fix15Mono-Bold,-               GameDefinition/InGameHelp.txt,-               README.md,-               CHANGELOG.md,-               LICENSE,-               COPYLEFT,-               CREDITS-extra-source-files: GameDefinition/MainMenu.ascii,-                    GameDefinition/PLAYING.md,-                    Makefile-author:        Andres Loeh, Mikolaj Konarski-maintainer:    Mikolaj Konarski <mikolaj.konarski@funktory.com>-category:      Game Engine, Game-build-type:    Simple-cabal-version: >= 1.10--source-repository head-  type:               git-  location:           git://github.com/LambdaHack/LambdaHack.git--flag vty-  description:        switch to the vty frontend-  default:            False-  manual:             True--flag curses-  description:        switch to the curses frontend (not fully supported)-  default:            False-  manual:             True--flag gtk-  description:        switch to the GTK frontend-  default:            False-  manual:             True--flag sdl-  description:        switch to the SDL2 frontend-  default:            False-  manual:             True--flag jsaddle-  description:        switch to the JSaddle frontend-  default:            False-  manual:             True--flag with_expensive_assertions-  description:        turn on expensive assertions of well-tested code-  default:            False-  manual:             True--flag release-  description:        prepare for a release (expose internal functions and types, etc.)-  default:            True-  manual:             True--library-  exposed-modules:    Game.LambdaHack.Atomic-                      Game.LambdaHack.Atomic.CmdAtomic-                      Game.LambdaHack.Atomic.HandleAtomicWrite-                      Game.LambdaHack.Atomic.MonadStateWrite-                      Game.LambdaHack.Atomic.PosAtomicRead-                      Game.LambdaHack.Client-                      Game.LambdaHack.Client.AI-                      Game.LambdaHack.Client.AI.ConditionM-                      Game.LambdaHack.Client.AI.HandleAbilityM-                      Game.LambdaHack.Client.AI.PickActorM-                      Game.LambdaHack.Client.AI.PickTargetM-                      Game.LambdaHack.Client.AI.Strategy-                      Game.LambdaHack.Client.Bfs-                      Game.LambdaHack.Client.BfsM-                      Game.LambdaHack.Client.ClientOptions-                      Game.LambdaHack.Client.CommonM-                      Game.LambdaHack.Client.HandleAtomicM-                      Game.LambdaHack.Client.HandleResponseM-                      Game.LambdaHack.Client.LoopM-                      Game.LambdaHack.Client.MonadClient-                      Game.LambdaHack.Client.Preferences-                      Game.LambdaHack.Client.Request-                      Game.LambdaHack.Client.Response-                      Game.LambdaHack.Client.State-                      Game.LambdaHack.Client.UI-                      Game.LambdaHack.Client.UI.ActorUI-                      Game.LambdaHack.Client.UI.Animation-                      Game.LambdaHack.Client.UI.Content.KeyKind-                      Game.LambdaHack.Client.UI.DrawM-                      Game.LambdaHack.Client.UI.DisplayAtomicM-                      Game.LambdaHack.Client.UI.EffectDescription-                      Game.LambdaHack.Client.UI.Frame-                      Game.LambdaHack.Client.UI.FrameM-                      Game.LambdaHack.Client.UI.Frontend-                      Game.LambdaHack.Client.UI.Frontend.Chosen-                      Game.LambdaHack.Client.UI.Frontend.Common-                      Game.LambdaHack.Client.UI.Frontend.Teletype-                      Game.LambdaHack.Client.UI.HandleHelperM-                      Game.LambdaHack.Client.UI.HandleHumanGlobalM-                      Game.LambdaHack.Client.UI.HandleHumanLocalM-                      Game.LambdaHack.Client.UI.HandleHumanM-                      Game.LambdaHack.Client.UI.HumanCmd-                      Game.LambdaHack.Client.UI.InventoryM-                      Game.LambdaHack.Client.UI.ItemDescription-                      Game.LambdaHack.Client.UI.ItemSlot-                      Game.LambdaHack.Client.UI.Key-                      Game.LambdaHack.Client.UI.KeyBindings-                      Game.LambdaHack.Client.UI.MonadClientUI-                      Game.LambdaHack.Client.UI.Msg-                      Game.LambdaHack.Client.UI.MsgM-                      Game.LambdaHack.Client.UI.Overlay-                      Game.LambdaHack.Client.UI.RunM-                      Game.LambdaHack.Client.UI.SessionUI-                      Game.LambdaHack.Client.UI.Slideshow-                      Game.LambdaHack.Client.UI.SlideshowM-                      Game.LambdaHack.Client.UI.UIOptions-                      Game.LambdaHack.Common.Ability-                      Game.LambdaHack.Common.Actor-                      Game.LambdaHack.Common.ActorState-                      Game.LambdaHack.Common.Color-                      Game.LambdaHack.Common.ContentData-                      Game.LambdaHack.Common.Dice-                      Game.LambdaHack.Common.Faction-                      Game.LambdaHack.Common.File-                      Game.LambdaHack.Common.Flavour-                      Game.LambdaHack.Common.Frequency-                      Game.LambdaHack.Common.HighScore-                      Game.LambdaHack.Common.Item-                      Game.LambdaHack.Common.ItemAspect-                      Game.LambdaHack.Common.Kind-                      Game.LambdaHack.Common.Level-                      Game.LambdaHack.Common.Misc-                      Game.LambdaHack.Common.MonadStateRead-                      Game.LambdaHack.Common.Perception-                      Game.LambdaHack.Common.PointArray-                      Game.LambdaHack.Common.Point-                      Game.LambdaHack.Common.Prelude-                      Game.LambdaHack.Common.Random-                      Game.LambdaHack.Common.ReqFailure-                      Game.LambdaHack.Common.RingBuffer-                      Game.LambdaHack.Common.Save-                      Game.LambdaHack.Common.State-                      Game.LambdaHack.Common.Thread-                      Game.LambdaHack.Common.Tile-                      Game.LambdaHack.Common.Time-                      Game.LambdaHack.Common.Vector-                      Game.LambdaHack.Content.CaveKind-                      Game.LambdaHack.Content.ItemKind-                      Game.LambdaHack.Content.ModeKind-                      Game.LambdaHack.Content.PlaceKind-                      Game.LambdaHack.Content.RuleKind-                      Game.LambdaHack.Content.TileKind-                      Game.LambdaHack.Server-                      Game.LambdaHack.Server.BroadcastAtomic-                      Game.LambdaHack.Server.Commandline-                      Game.LambdaHack.Server.CommonM-                      Game.LambdaHack.Server.DebugM-                      Game.LambdaHack.Server.DungeonGen-                      Game.LambdaHack.Server.DungeonGen.Area-                      Game.LambdaHack.Server.DungeonGen.AreaRnd-                      Game.LambdaHack.Server.DungeonGen.Cave-                      Game.LambdaHack.Server.DungeonGen.Place-                      Game.LambdaHack.Server.EndM-                      Game.LambdaHack.Server.Fov-                      Game.LambdaHack.Server.FovDigital-                      Game.LambdaHack.Server.HandleAtomicM-                      Game.LambdaHack.Server.HandleEffectM-                      Game.LambdaHack.Server.HandleRequestM-                      Game.LambdaHack.Server.ItemRev-                      Game.LambdaHack.Server.ItemM-                      Game.LambdaHack.Server.LoopM-                      Game.LambdaHack.Server.MonadServer-                      Game.LambdaHack.Server.PeriodicM-                      Game.LambdaHack.Server.ProtocolM-                      Game.LambdaHack.Server.ServerOptions-                      Game.LambdaHack.Server.StartM-                      Game.LambdaHack.Server.State--  other-modules:      Paths_LambdaHack-  build-depends:-                      assert-failure >= 0.1.2 && < 0.2,-                      async      >= 2,-                      base       >= 4.9 && < 99,-                      base-compat >= 0.8.0,-                      binary     >= 0.8,-                      bytestring >= 0.9.2 ,-                      containers >= 0.5.3.0,-                      deepseq    >= 1.3,-                      directory  >= 1.1.0.1,-                      enummapset >= 0.5.2.2,-                      filepath   >= 1.2.0.1,-                      ghc-prim,-                      hashable   >= 1.1.2.5,-                      hsini      >= 0.2,-                      keys       >= 3,-                      miniutter  >= 0.4.5.0,-                      optparse-applicative >= 0.13,-                      pretty-show >= 1.6,-                      random     >= 1.1,-                      stm        >= 2.4,-                      time       >= 1.4,-                      text       >= 0.11.2.3,-                      transformers >= 0.4,-                      unordered-containers >= 0.2.3,-                      vector     >= 0.11,-                      vector-binary-instances >= 0.2.3.1--  default-language:   Haskell2010-  default-extensions: MonoLocalBinds, ScopedTypeVariables, OverloadedStrings-                      BangPatterns, RecordWildCards, NamedFieldPuns, MultiWayIf,-                      LambdaCase, StrictData, CPP-  other-extensions:   TemplateHaskell, MultiParamTypeClasses, RankNTypes,-                      TypeFamilies, FlexibleContexts, FlexibleInstances,-                      DeriveFunctor, FunctionalDependencies,-                      GeneralizedNewtypeDeriving, TupleSections,-                      DeriveFoldable, DeriveTraversable,-                      ExistentialQuantification, GADTs, StandaloneDeriving,-                      DataKinds, KindSignatures, DeriveGeneric-  ghc-options:        -Wall -Wcompat -Worphans -Wincomplete-uni-patterns -Wincomplete-record-updates -Wimplicit-prelude -Wmissing-home-modules -Widentities -Wredundant-constraints-  ghc-options:        -Wall-missed-specialisations-  ghc-options:        -fno-ignore-asserts -fexpose-all-unfoldings -fspecialise-aggressively -fsimpl-tick-factor=200--  if impl(ghcjs) || flag(jsaddle) {-    exposed-modules:    Game.LambdaHack.Client.UI.Frontend.Dom-    build-depends:    ghcjs-dom >= 0.9.1.1-    cpp-options:      -DUSE_BROWSER-  } else { if flag(vty) {-    exposed-modules:    Game.LambdaHack.Client.UI.Frontend.Vty-    build-depends:    vty >= 5-    cpp-options:      -DUSE_VTY-  } else { if flag(curses) {-    exposed-modules:    Game.LambdaHack.Client.UI.Frontend.Curses-    build-depends:    hscurses >= 1.4.1-    cpp-options:      -DUSE_CURSES-  } else { if flag(gtk) {-    exposed-modules:    Game.LambdaHack.Client.UI.Frontend.Gtk-    build-depends:    gtk3 >= 0.12.1-    cpp-options:      -DUSE_GTK-  } else {-    exposed-modules:    Game.LambdaHack.Client.UI.Frontend.Sdl-    build-depends:    sdl2 >= 2, sdl2-ttf >= 2-    cpp-options:      -DUSE_SDL-  } } } }--  if impl(ghcjs) {-    exposed-modules:    Game.LambdaHack.Common.JSFile-    cpp-options:      -DUSE_JSFILE-  } else {-    exposed-modules:    Game.LambdaHack.Common.HSFile-    build-depends:    zlib >= 0.5.3.1-  }--  if flag(with_expensive_assertions)-    cpp-options:      -DWITH_EXPENSIVE_ASSERTIONS--  if flag(release)-    cpp-options:      -DEXPOSE_INTERNAL--executable LambdaHack-  hs-source-dirs:     GameDefinition-  main-is:            Main.hs-  other-modules:      Client.UI.Content.KeyKind,-                      Content.CaveKind,-                      Content.ItemKind,-                      Content.ItemKindEmbed,-                      Content.ItemKindActor,-                      Content.ItemKindOrgan,-                      Content.ItemKindBlast,-                      Content.ItemKindTemporary,-                      Content.ModeKind,-                      Content.ModeKindPlayer,-                      Content.PlaceKind,-                      Content.RuleKind,-                      Content.TileKind,-                      Implementation.MonadClientImplementation,-                      Implementation.MonadServerImplementation,-                      Implementation.TieKnot,-                      Paths_LambdaHack-  build-depends:      LambdaHack,-                      template-haskell >= 2.6,--                      assert-failure >= 0.1.2 && < 0.2,-                      async      >= 2,-                      base       >= 4.9 && < 99,-                      base-compat >= 0.8.0,-                      binary     >= 0.8,-                      bytestring >= 0.9.2 ,-                      containers >= 0.5.3.0,-                      deepseq    >= 1.3,-                      directory  >= 1.1.0.1,-                      enummapset >= 0.5.2.2,-                      filepath   >= 1.2.0.1,-                      ghc-prim,-                      hashable   >= 1.1.2.5,-                      hsini      >= 0.2,-                      keys       >= 3,-                      miniutter  >= 0.4.5.0,-                      optparse-applicative >= 0.13,-                      pretty-show >= 1.6,-                      random     >= 1.1,-                      stm        >= 2.4,-                      text       >= 0.11.2.3,-                      time       >= 1.4,-                      transformers >= 0.4,-                      unordered-containers >= 0.2.3,-                      vector     >= 0.11,-                      vector-binary-instances >= 0.2.3.1--  default-language:   Haskell2010-  default-extensions: MonoLocalBinds, ScopedTypeVariables, OverloadedStrings-                      BangPatterns, RecordWildCards, NamedFieldPuns, MultiWayIf,-                      LambdaCase, StrictData, CPP-  other-extensions:   TemplateHaskell-  ghc-options:        -Wall -Wcompat -Worphans -Wincomplete-uni-patterns -Wincomplete-record-updates -Wimplicit-prelude -Wmissing-home-modules -Widentities -Wredundant-constraints-  ghc-options:        -Wall-missed-specialisations-  ghc-options:        -fno-ignore-asserts -fexpose-all-unfoldings -fspecialise-aggressively-  ghc-options:        -threaded -rtsopts--- Minimize median lag at the cost of occasional bigger GC lag,--- which fortunately sometimes fits into idle time between turns):-  ghc-options:        -with-rtsopts=-A99m--  if impl(ghcjs) {--- This is the largest GHCJS_BUSY_YIELD value that does not cause dropped frames--- on my machine with default --maxFps.-    cpp-options:      -DGHCJS_BUSY_YIELD=50-    cpp-options:      -DUSE_JSFILE-  } else {-    build-depends:    zlib >= 0.5.3.1-  }--test-suite test-  type:               exitcode-stdio-1.0-  hs-source-dirs:     GameDefinition, test-  main-is:            test.hs-  other-modules:      Client.UI.Content.KeyKind,-                      Content.CaveKind,-                      Content.ItemKind,-                      Content.ItemKindEmbed,-                      Content.ItemKindActor,-                      Content.ItemKindOrgan,-                      Content.ItemKindBlast,-                      Content.ItemKindTemporary,-                      Content.ModeKind,-                      Content.ModeKindPlayer,-                      Content.PlaceKind,-                      Content.RuleKind,-                      Content.TileKind,-                      Implementation.MonadClientImplementation,-                      Implementation.MonadServerImplementation,-                      Implementation.TieKnot,-                      Paths_LambdaHack-  build-depends:      LambdaHack,-                      template-haskell >= 2.6,--                      assert-failure >= 0.1.2 && < 0.2,-                      async      >= 2,-                      base       >= 4.9 && < 99,-                      base-compat >= 0.8.0,-                      binary     >= 0.8,-                      bytestring >= 0.9.2 ,-                      containers >= 0.5.3.0,-                      deepseq    >= 1.3,-                      directory  >= 1.1.0.1,-                      enummapset >= 0.5.2.2,-                      filepath   >= 1.2.0.1,-                      ghc-prim,-                      hashable   >= 1.1.2.5,-                      hsini      >= 0.2,-                      keys       >= 3,-                      miniutter  >= 0.4.5.0,-                      optparse-applicative >= 0.13,-                      pretty-show >= 1.6,-                      random     >= 1.1,-                      stm        >= 2.4,-                      text       >= 0.11.2.3,-                      time       >= 1.4,-                      transformers >= 0.4,-                      unordered-containers >= 0.2.3,-                      vector     >= 0.11,-                      vector-binary-instances >= 0.2.3.1--  default-language:   Haskell2010-  default-extensions: MonoLocalBinds, ScopedTypeVariables, OverloadedStrings-                      BangPatterns, RecordWildCards, NamedFieldPuns, MultiWayIf,-                      LambdaCase, StrictData, CPP-  other-extensions:   TemplateHaskell-  ghc-options:        -Wall -Wcompat -Worphans -Wincomplete-uni-patterns -Wincomplete-record-updates -Wimplicit-prelude -Wmissing-home-modules -Widentities -Wredundant-constraints-  ghc-options:        -fno-ignore-asserts -fexpose-all-unfoldings -fspecialise-aggressively-  ghc-options:        -threaded -rtsopts--- Minimize median lag at the cost of occasional bigger GC lag,--- which fortunately sometimes fits into idle time between turns):-  ghc-options:        -with-rtsopts=-A99m--  if impl(ghcjs) {--- This is the largest GHCJS_BUSY_YIELD value that does not cause dropped frames--- on my machine with default --maxFps.-    cpp-options:      -DGHCJS_BUSY_YIELD=50-  } else {-    build-depends:    zlib >= 0.5.3.1-  }+name:           LambdaHack
+-- The package version. See the Haskell package versioning policy (PVP)
+-- for standards guiding when and how versions should be incremented.
+-- http://www.haskell.org/haskellwiki/Package_versioning_policy
+-- PVP summary:+-+------- breaking API changes
+--             | | +----- minor or non-breaking API additions
+--             | | | +--- code changes with no API change
+version:       0.8.1.1
+x-revision: 1
+synopsis:      A game engine library for tactical squad ASCII roguelike dungeon crawlers
+description:   LambdaHack is a Haskell game engine library for ASCII roguelike
+               games of arbitrary theme, size and complexity, with optional
+               tactical squad combat. It's packaged together with a sample
+               dungeon crawler in fantasy setting that can be tried out
+               in the browser: <http://lambdahack.github.io>
+               (It runs fastest on Chrome. Keyboard commands and savefiles
+               are supported only on recent enough versions of browsers.
+               Mouse should work everywhere.)
+               .
+               Please see the changelog file for recent improvements
+               and the issue tracker for short-term plans. Long term goals
+               include multiplayer tactical squad combat, in-game content
+               creation, auto-balancing and persistent content modification
+               based on player behaviour. Contributions are welcome.
+               .
+               Games known to use the LambdaHack library:
+               .
+               * Allure of the Stars, a near-future Sci-Fi game,
+               <http://hackage.haskell.org/package/Allure>
+               .
+               * Space Privateers, an adventure game set in far future,
+               <http://hackage.haskell.org/package/SpacePrivateers>
+               .
+               Note: All modules in this library are kept visible,
+               to let games override and reuse them.
+               OTOH, to reflect that some modules are implementation details
+               relative to others, the source code adheres to the following
+               convention. If a module has the same name as a directory,
+               the module is the exclusive interface to the directory.
+               No references to the modules in the directory are allowed
+               except from the interface module. This policy is only binding
+               when developing the library --- library users are free
+               to access any modules, since the library authors are in
+               no position to guess their particular needs.
+homepage:      https://lambdahack.github.io
+bug-reports:   http://github.com/LambdaHack/LambdaHack/issues
+license:       BSD3
+license-file:  COPYLEFT
+tested-with:   GHC==8.0.2, GHC==8.2.2, GHC==8.4.3
+data-files:    GameDefinition/config.ui.default,
+               GameDefinition/fonts/16x16x.fon,
+               GameDefinition/fonts/8x8xb.fon,
+               GameDefinition/fonts/8x8x.fon,
+               GameDefinition/fonts/LICENSE.16x16x,
+               GameDefinition/fonts/Fix15Mono-Bold.woff,
+               GameDefinition/fonts/LICENSE.Fix15Mono-Bold,
+               GameDefinition/InGameHelp.txt,
+               README.md,
+               CHANGELOG.md,
+               LICENSE,
+               COPYLEFT,
+               CREDITS
+extra-source-files: GameDefinition/MainMenu.ascii,
+                    GameDefinition/PLAYING.md,
+                    Makefile
+author:        Andres Loeh, Mikolaj Konarski
+maintainer:    Mikolaj Konarski <mikolaj.konarski@funktory.com>
+category:      Game Engine, Game
+build-type:    Simple
+cabal-version: >= 1.10
+
+source-repository head
+  type:               git
+  location:           git://github.com/LambdaHack/LambdaHack.git
+
+flag vty
+  description:        switch to the vty frontend
+  default:            False
+  manual:             True
+
+flag curses
+  description:        switch to the curses frontend (not fully supported)
+  default:            False
+  manual:             True
+
+flag gtk
+  description:        switch to the GTK frontend
+  default:            False
+  manual:             True
+
+flag sdl
+  description:        switch to the SDL2 frontend
+  default:            False
+  manual:             True
+
+flag jsaddle
+  description:        switch to the JSaddle frontend
+  default:            False
+  manual:             True
+
+flag with_expensive_assertions
+  description:        turn on expensive assertions of well-tested code
+  default:            False
+  manual:             True
+
+flag release
+  description:        prepare for a release (expose internal functions and types, etc.)
+  default:            True
+  manual:             True
+
+library
+  exposed-modules:    Game.LambdaHack.Atomic
+                      Game.LambdaHack.Atomic.CmdAtomic
+                      Game.LambdaHack.Atomic.HandleAtomicWrite
+                      Game.LambdaHack.Atomic.MonadStateWrite
+                      Game.LambdaHack.Atomic.PosAtomicRead
+                      Game.LambdaHack.Client
+                      Game.LambdaHack.Client.AI
+                      Game.LambdaHack.Client.AI.ConditionM
+                      Game.LambdaHack.Client.AI.HandleAbilityM
+                      Game.LambdaHack.Client.AI.PickActorM
+                      Game.LambdaHack.Client.AI.PickTargetM
+                      Game.LambdaHack.Client.AI.Strategy
+                      Game.LambdaHack.Client.Bfs
+                      Game.LambdaHack.Client.BfsM
+                      Game.LambdaHack.Client.ClientOptions
+                      Game.LambdaHack.Client.CommonM
+                      Game.LambdaHack.Client.HandleAtomicM
+                      Game.LambdaHack.Client.HandleResponseM
+                      Game.LambdaHack.Client.LoopM
+                      Game.LambdaHack.Client.MonadClient
+                      Game.LambdaHack.Client.Preferences
+                      Game.LambdaHack.Client.Request
+                      Game.LambdaHack.Client.Response
+                      Game.LambdaHack.Client.State
+                      Game.LambdaHack.Client.UI
+                      Game.LambdaHack.Client.UI.ActorUI
+                      Game.LambdaHack.Client.UI.Animation
+                      Game.LambdaHack.Client.UI.Content.KeyKind
+                      Game.LambdaHack.Client.UI.DrawM
+                      Game.LambdaHack.Client.UI.DisplayAtomicM
+                      Game.LambdaHack.Client.UI.EffectDescription
+                      Game.LambdaHack.Client.UI.Frame
+                      Game.LambdaHack.Client.UI.FrameM
+                      Game.LambdaHack.Client.UI.Frontend
+                      Game.LambdaHack.Client.UI.Frontend.Chosen
+                      Game.LambdaHack.Client.UI.Frontend.Common
+                      Game.LambdaHack.Client.UI.Frontend.Teletype
+                      Game.LambdaHack.Client.UI.HandleHelperM
+                      Game.LambdaHack.Client.UI.HandleHumanGlobalM
+                      Game.LambdaHack.Client.UI.HandleHumanLocalM
+                      Game.LambdaHack.Client.UI.HandleHumanM
+                      Game.LambdaHack.Client.UI.HumanCmd
+                      Game.LambdaHack.Client.UI.InventoryM
+                      Game.LambdaHack.Client.UI.ItemDescription
+                      Game.LambdaHack.Client.UI.ItemSlot
+                      Game.LambdaHack.Client.UI.Key
+                      Game.LambdaHack.Client.UI.KeyBindings
+                      Game.LambdaHack.Client.UI.MonadClientUI
+                      Game.LambdaHack.Client.UI.Msg
+                      Game.LambdaHack.Client.UI.MsgM
+                      Game.LambdaHack.Client.UI.Overlay
+                      Game.LambdaHack.Client.UI.RunM
+                      Game.LambdaHack.Client.UI.SessionUI
+                      Game.LambdaHack.Client.UI.Slideshow
+                      Game.LambdaHack.Client.UI.SlideshowM
+                      Game.LambdaHack.Client.UI.UIOptions
+                      Game.LambdaHack.Common.Ability
+                      Game.LambdaHack.Common.Actor
+                      Game.LambdaHack.Common.ActorState
+                      Game.LambdaHack.Common.Color
+                      Game.LambdaHack.Common.ContentData
+                      Game.LambdaHack.Common.Dice
+                      Game.LambdaHack.Common.Faction
+                      Game.LambdaHack.Common.File
+                      Game.LambdaHack.Common.Flavour
+                      Game.LambdaHack.Common.Frequency
+                      Game.LambdaHack.Common.HighScore
+                      Game.LambdaHack.Common.Item
+                      Game.LambdaHack.Common.ItemAspect
+                      Game.LambdaHack.Common.Kind
+                      Game.LambdaHack.Common.Level
+                      Game.LambdaHack.Common.Misc
+                      Game.LambdaHack.Common.MonadStateRead
+                      Game.LambdaHack.Common.Perception
+                      Game.LambdaHack.Common.PointArray
+                      Game.LambdaHack.Common.Point
+                      Game.LambdaHack.Common.Prelude
+                      Game.LambdaHack.Common.Random
+                      Game.LambdaHack.Common.ReqFailure
+                      Game.LambdaHack.Common.RingBuffer
+                      Game.LambdaHack.Common.Save
+                      Game.LambdaHack.Common.State
+                      Game.LambdaHack.Common.Thread
+                      Game.LambdaHack.Common.Tile
+                      Game.LambdaHack.Common.Time
+                      Game.LambdaHack.Common.Vector
+                      Game.LambdaHack.Content.CaveKind
+                      Game.LambdaHack.Content.ItemKind
+                      Game.LambdaHack.Content.ModeKind
+                      Game.LambdaHack.Content.PlaceKind
+                      Game.LambdaHack.Content.RuleKind
+                      Game.LambdaHack.Content.TileKind
+                      Game.LambdaHack.Server
+                      Game.LambdaHack.Server.BroadcastAtomic
+                      Game.LambdaHack.Server.Commandline
+                      Game.LambdaHack.Server.CommonM
+                      Game.LambdaHack.Server.DebugM
+                      Game.LambdaHack.Server.DungeonGen
+                      Game.LambdaHack.Server.DungeonGen.Area
+                      Game.LambdaHack.Server.DungeonGen.AreaRnd
+                      Game.LambdaHack.Server.DungeonGen.Cave
+                      Game.LambdaHack.Server.DungeonGen.Place
+                      Game.LambdaHack.Server.EndM
+                      Game.LambdaHack.Server.Fov
+                      Game.LambdaHack.Server.FovDigital
+                      Game.LambdaHack.Server.HandleAtomicM
+                      Game.LambdaHack.Server.HandleEffectM
+                      Game.LambdaHack.Server.HandleRequestM
+                      Game.LambdaHack.Server.ItemRev
+                      Game.LambdaHack.Server.ItemM
+                      Game.LambdaHack.Server.LoopM
+                      Game.LambdaHack.Server.MonadServer
+                      Game.LambdaHack.Server.PeriodicM
+                      Game.LambdaHack.Server.ProtocolM
+                      Game.LambdaHack.Server.ServerOptions
+                      Game.LambdaHack.Server.StartM
+                      Game.LambdaHack.Server.State
+
+  other-modules:      Paths_LambdaHack
+  build-depends:
+                      assert-failure >= 0.1.2 && < 0.2,
+                      async      >= 2,
+                      base       >= 4.9 && < 4.19,
+                      base-compat >= 0.8.0,
+                      binary     >= 0.8,
+                      bytestring >= 0.9.2 ,
+                      containers >= 0.5.3.0,
+                      deepseq    >= 1.3,
+                      directory  >= 1.1.0.1,
+                      enummapset >= 0.5.2.2,
+                      filepath   >= 1.2.0.1,
+                      ghc-prim,
+                      hashable   >= 1.1.2.5,
+                      hsini      >= 0.2,
+                      keys       >= 3,
+                      miniutter  >= 0.4.5.0,
+                      optparse-applicative >= 0.13,
+                      pretty-show >= 1.6,
+                      random     >= 1.1,
+                      stm        >= 2.4,
+                      time       >= 1.4,
+                      text       >= 0.11.2.3,
+                      transformers >= 0.4,
+                      unordered-containers >= 0.2.3,
+                      vector     >= 0.11,
+                      vector-binary-instances >= 0.2.3.1
+
+  default-language:   Haskell2010
+  default-extensions: MonoLocalBinds, ScopedTypeVariables, OverloadedStrings
+                      BangPatterns, RecordWildCards, NamedFieldPuns, MultiWayIf,
+                      LambdaCase, StrictData, CPP
+  other-extensions:   TemplateHaskell, MultiParamTypeClasses, RankNTypes,
+                      TypeFamilies, FlexibleContexts, FlexibleInstances,
+                      DeriveFunctor, FunctionalDependencies,
+                      GeneralizedNewtypeDeriving, TupleSections,
+                      DeriveFoldable, DeriveTraversable,
+                      ExistentialQuantification, GADTs, StandaloneDeriving,
+                      DataKinds, KindSignatures, DeriveGeneric
+  ghc-options:        -Wall -Wcompat -Worphans -Wincomplete-uni-patterns -Wincomplete-record-updates -Wimplicit-prelude -Wmissing-home-modules -Widentities -Wredundant-constraints
+  ghc-options:        -Wall-missed-specialisations
+  ghc-options:        -fno-ignore-asserts -fexpose-all-unfoldings -fspecialise-aggressively -fsimpl-tick-factor=200
+
+  if impl(ghcjs) || flag(jsaddle) {
+    exposed-modules:    Game.LambdaHack.Client.UI.Frontend.Dom
+    build-depends:    ghcjs-dom >= 0.9.1.1
+    cpp-options:      -DUSE_BROWSER
+  } else { if flag(vty) {
+    exposed-modules:    Game.LambdaHack.Client.UI.Frontend.Vty
+    build-depends:    vty >= 5
+    cpp-options:      -DUSE_VTY
+  } else { if flag(curses) {
+    exposed-modules:    Game.LambdaHack.Client.UI.Frontend.Curses
+    build-depends:    hscurses >= 1.4.1
+    cpp-options:      -DUSE_CURSES
+  } else { if flag(gtk) {
+    exposed-modules:    Game.LambdaHack.Client.UI.Frontend.Gtk
+    build-depends:    gtk3 >= 0.12.1
+    cpp-options:      -DUSE_GTK
+  } else {
+    exposed-modules:    Game.LambdaHack.Client.UI.Frontend.Sdl
+    build-depends:    sdl2 >= 2, sdl2-ttf >= 2
+    cpp-options:      -DUSE_SDL
+  } } } }
+
+  if impl(ghcjs) {
+    exposed-modules:    Game.LambdaHack.Common.JSFile
+    cpp-options:      -DUSE_JSFILE
+  } else {
+    exposed-modules:    Game.LambdaHack.Common.HSFile
+    build-depends:    zlib >= 0.5.3.1
+  }
+
+  if flag(with_expensive_assertions)
+    cpp-options:      -DWITH_EXPENSIVE_ASSERTIONS
+
+  if flag(release)
+    cpp-options:      -DEXPOSE_INTERNAL
+
+executable LambdaHack
+  hs-source-dirs:     GameDefinition
+  main-is:            Main.hs
+  other-modules:      Client.UI.Content.KeyKind,
+                      Content.CaveKind,
+                      Content.ItemKind,
+                      Content.ItemKindEmbed,
+                      Content.ItemKindActor,
+                      Content.ItemKindOrgan,
+                      Content.ItemKindBlast,
+                      Content.ItemKindTemporary,
+                      Content.ModeKind,
+                      Content.ModeKindPlayer,
+                      Content.PlaceKind,
+                      Content.RuleKind,
+                      Content.TileKind,
+                      Implementation.MonadClientImplementation,
+                      Implementation.MonadServerImplementation,
+                      Implementation.TieKnot,
+                      Paths_LambdaHack
+  build-depends:      LambdaHack,
+                      template-haskell >= 2.6,
+
+                      assert-failure >= 0.1.2 && < 0.2,
+                      async      >= 2,
+                      base       >= 4.9 && < 99,
+                      base-compat >= 0.8.0,
+                      binary     >= 0.8,
+                      bytestring >= 0.9.2 ,
+                      containers >= 0.5.3.0,
+                      deepseq    >= 1.3,
+                      directory  >= 1.1.0.1,
+                      enummapset >= 0.5.2.2,
+                      filepath   >= 1.2.0.1,
+                      ghc-prim,
+                      hashable   >= 1.1.2.5,
+                      hsini      >= 0.2,
+                      keys       >= 3,
+                      miniutter  >= 0.4.5.0,
+                      optparse-applicative >= 0.13,
+                      pretty-show >= 1.6,
+                      random     >= 1.1,
+                      stm        >= 2.4,
+                      text       >= 0.11.2.3,
+                      time       >= 1.4,
+                      transformers >= 0.4,
+                      unordered-containers >= 0.2.3,
+                      vector     >= 0.11,
+                      vector-binary-instances >= 0.2.3.1
+
+  default-language:   Haskell2010
+  default-extensions: MonoLocalBinds, ScopedTypeVariables, OverloadedStrings
+                      BangPatterns, RecordWildCards, NamedFieldPuns, MultiWayIf,
+                      LambdaCase, StrictData, CPP
+  other-extensions:   TemplateHaskell
+  ghc-options:        -Wall -Wcompat -Worphans -Wincomplete-uni-patterns -Wincomplete-record-updates -Wimplicit-prelude -Wmissing-home-modules -Widentities -Wredundant-constraints
+  ghc-options:        -Wall-missed-specialisations
+  ghc-options:        -fno-ignore-asserts -fexpose-all-unfoldings -fspecialise-aggressively
+  ghc-options:        -threaded -rtsopts
+-- Minimize median lag at the cost of occasional bigger GC lag,
+-- which fortunately sometimes fits into idle time between turns):
+  ghc-options:        -with-rtsopts=-A99m
+
+  if impl(ghcjs) {
+-- This is the largest GHCJS_BUSY_YIELD value that does not cause dropped frames
+-- on my machine with default --maxFps.
+    cpp-options:      -DGHCJS_BUSY_YIELD=50
+    cpp-options:      -DUSE_JSFILE
+  } else {
+    build-depends:    zlib >= 0.5.3.1
+  }
+
+test-suite test
+  type:               exitcode-stdio-1.0
+  hs-source-dirs:     GameDefinition, test
+  main-is:            test.hs
+  other-modules:      Client.UI.Content.KeyKind,
+                      Content.CaveKind,
+                      Content.ItemKind,
+                      Content.ItemKindEmbed,
+                      Content.ItemKindActor,
+                      Content.ItemKindOrgan,
+                      Content.ItemKindBlast,
+                      Content.ItemKindTemporary,
+                      Content.ModeKind,
+                      Content.ModeKindPlayer,
+                      Content.PlaceKind,
+                      Content.RuleKind,
+                      Content.TileKind,
+                      Implementation.MonadClientImplementation,
+                      Implementation.MonadServerImplementation,
+                      Implementation.TieKnot,
+                      Paths_LambdaHack
+  build-depends:      LambdaHack,
+                      template-haskell >= 2.6,
+
+                      assert-failure >= 0.1.2 && < 0.2,
+                      async      >= 2,
+                      base       >= 4.9 && < 99,
+                      base-compat >= 0.8.0,
+                      binary     >= 0.8,
+                      bytestring >= 0.9.2 ,
+                      containers >= 0.5.3.0,
+                      deepseq    >= 1.3,
+                      directory  >= 1.1.0.1,
+                      enummapset >= 0.5.2.2,
+                      filepath   >= 1.2.0.1,
+                      ghc-prim,
+                      hashable   >= 1.1.2.5,
+                      hsini      >= 0.2,
+                      keys       >= 3,
+                      miniutter  >= 0.4.5.0,
+                      optparse-applicative >= 0.13,
+                      pretty-show >= 1.6,
+                      random     >= 1.1,
+                      stm        >= 2.4,
+                      text       >= 0.11.2.3,
+                      time       >= 1.4,
+                      transformers >= 0.4,
+                      unordered-containers >= 0.2.3,
+                      vector     >= 0.11,
+                      vector-binary-instances >= 0.2.3.1
+
+  default-language:   Haskell2010
+  default-extensions: MonoLocalBinds, ScopedTypeVariables, OverloadedStrings
+                      BangPatterns, RecordWildCards, NamedFieldPuns, MultiWayIf,
+                      LambdaCase, StrictData, CPP
+  other-extensions:   TemplateHaskell
+  ghc-options:        -Wall -Wcompat -Worphans -Wincomplete-uni-patterns -Wincomplete-record-updates -Wimplicit-prelude -Wmissing-home-modules -Widentities -Wredundant-constraints
+  ghc-options:        -fno-ignore-asserts -fexpose-all-unfoldings -fspecialise-aggressively
+  ghc-options:        -threaded -rtsopts
+-- Minimize median lag at the cost of occasional bigger GC lag,
+-- which fortunately sometimes fits into idle time between turns):
+  ghc-options:        -with-rtsopts=-A99m
+
+  if impl(ghcjs) {
+-- This is the largest GHCJS_BUSY_YIELD value that does not cause dropped frames
+-- on my machine with default --maxFps.
+    cpp-options:      -DGHCJS_BUSY_YIELD=50
+  } else {
+    build-depends:    zlib >= 0.5.3.1
+  }