Resource gathering + programming game
Go to file
Brent Yorgey eb20ea9b07
Represent types with applications of type constructors (#1873)
We used to represent types with a different constructor for each different sort of type, e.g. there was a constructor `TyFunF` which took two types as arguments, etc.  This refactoring creates a new type `TyCon` which has things like `TCFun` and `TCBase` and represents various types as an application of a `TyCon` to some arguments.  For example function type `t1 -> t2` would be represented no longer as `TyFunF t1 t2` but instead as `TyConApp TCFun [t1, t2]`.

This is slightly more roundabout, and it does make parsing slightly trickier, but it greatly simplifies and shortens code for e.g. unification, extracting free variables, etc. (because what used to be many essentially identical cases now turn into a single case).  It also paves the way for #1865, so we have a way to represent new type constructors defined by the user.  E.g. if the user defined `tydef Maybe a = Unit + a` then we would represent the type `Maybe Int` as something like `TyConApp (TCUser "Maybe") [TyBase BInt]`.

This also means that types like `Int Unit` are no longer a parse error, so we need kind checking to rule out applications of type constructors to the wrong number of arguments; this PR adds such kind checking as well.  Having some sort of kind checking is unavoidable when allowing the user to define their own new type constructors (with an arbitrary number of arguments).
2024-05-28 22:52:11 +00:00
.github Bump checkout and setup-node actions to v4 (#1853) 2024-05-18 13:29:50 +00:00
.vscode extensible terrain (#1775) 2024-02-29 06:22:21 +00:00
app Implement GitHub authentication (#1856) 2024-05-22 00:27:21 +00:00
data spreadable plant growth (#1817) 2024-05-26 20:50:27 +00:00
docs Update sublibrary graph generation script & cabal description (#1849) 2024-05-13 17:25:00 +00:00
editors spreadable plant growth (#1817) 2024-05-26 20:50:27 +00:00
example Require types to start with an uppercase letter (#1583) 2024-05-21 04:16:32 +00:00
images 0.4 release blog post (#1444) 2023-08-22 12:35:05 -05:00
scripts Update sublibrary graph generation script & cabal description (#1849) 2024-05-13 17:25:00 +00:00
src Represent types with applications of type constructors (#1873) 2024-05-28 22:52:11 +00:00
test Represent types with applications of type constructors (#1873) 2024-05-28 22:52:11 +00:00
tournament Implement GitHub authentication (#1856) 2024-05-22 00:27:21 +00:00
web Render command matrix (#1658) 2024-01-26 01:02:14 +00:00
.gitignore refactoring towards tournament server (#1801) 2024-04-22 18:55:06 +00:00
.hlint.yaml Upload and parse scenarios (#1798) 2024-04-25 20:11:11 +00:00
.mergify.yml Support GHC 9.8, bump upper bounds, and update CI (#1828) 2024-05-10 14:43:41 -05:00
.restyled.yaml Fourmolu fixup (#1326) 2023-07-12 18:00:23 +00:00
.stan.toml exclude some stan observations 2021-09-15 06:39:21 -05:00
cabal.haskell-ci Support GHC 9.8, bump upper bounds, and update CI (#1828) 2024-05-10 14:43:41 -05:00
CHANGELOG.md 0.5 release (#1606) 2023-11-01 10:18:16 +00:00
CODE_OF_CONDUCT.md Adopt the Contributor Covenant Code of Conduct 2021-09-19 13:38:33 -05:00
COMMUNITY.md some updates to README and COMMUNITY 2022-10-05 17:52:52 -05:00
CONTRIBUTING.md Minor update to CONTRIBUTING.md (#1862) 2024-05-22 13:22:27 +00:00
cspell.json autopopulate spellchecker (#1749) 2024-01-28 01:54:13 +00:00
DESIGN.md More minor edits (#693) 2022-09-18 12:04:33 +00:00
feedback.yaml Parse comments (#1838) 2024-05-12 00:32:21 +00:00
fourmolu.yaml World description DSL (#1376) 2023-08-17 11:08:42 +00:00
hie.cabal.yaml Recommend cabal (#1822) 2024-05-06 00:09:33 +00:00
hie.stack.yaml Recommend cabal (#1822) 2024-05-06 00:09:33 +00:00
LICENSE Update editors (#581) 2022-07-25 00:16:23 +02:00
NOTICE Use a new opaque type for robots instead of strings (#303) 2022-03-02 03:00:44 +00:00
pull_request_template.md Add a pull request template (#1434) 2023-08-20 19:43:27 +00:00
README.md Recommend cabal (#1822) 2024-05-06 00:09:33 +00:00
scenarios Documentation for scenario file format (#612) 2022-07-30 08:02:11 -04:00
stack.yaml Dependency updates (#1765) 2024-02-12 20:04:28 +00:00
swarm.cabal Represent types with applications of type constructors (#1873) 2024-05-28 22:52:11 +00:00

Swarm

Build Status GitHub release (latest by date) Swarm release on Hackage Contributor Covenant ircchat GitHub Contributors

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. More info can be found on the Swarm website.

World 0 after scanning a tree and making a log.

Contributing

See CONTRIBUTING.md for information about various ways you can contribute to Swarm development!

Building

If you just want to play the game, head over to the Swarm website for installation instructions. If you want to build Swarm from source (e.g. in order to contribute, or to test out the latest bleeding-edge unreleased features), read on.

  1. Clone the Swarm repository, e.g.

    git clone https://github.com/swarm-game/swarm.git
    
  2. If you don't already have the cabal tool:

    1. Get the ghcup tool, a handy one-stop utility for managing all the different pieces of a Haskell toolchain.

    2. Use ghcup to install a supported version of GHC:

      ghcup install ghc 9.6.4
      
    3. Use ghcup to install cabal:

      ghcup install cabal
      
  3. Now use cabal to build and run Swarm:

    cd /path/to/the/swarm/repo
    cabal run -O0 swarm:exe:swarm
    

    (Note that we recommend turning off optimizations with -O0 since they don't seem to make much difference to the speed of the resulting executable, but they make a big difference in compilation time.)

  4. Go get a snack while cabal downloads and builds all of Swarm's dependencies.

  5. You might also want to check out the scripts directory, which contains an assortment of useful scripts for developers.