swarm-0.2.0.0: 2D resource gathering game with programmable robots
CopyrightBrent Yorgey
LicenseBSD-3-Clause
Maintainerbyorgey@gmail.com
Safe HaskellSafe-Inferred
LanguageHaskell2010

Swarm.Game.Exception

Description

Runtime exceptions for the Swarm language interpreter.

Synopsis

Documentation

data Exn Source #

The type of exceptions that can be thrown by robot programs.

Constructors

Fatal Text

Something went very wrong. This is a bug in Swarm and cannot be caught by a try block (but at least it will not crash the entire UI).

InfiniteLoop

An infinite loop was detected via a blackhole. This cannot be caught by a try block.

Incapable IncapableFix Requirements Term

A robot tried to do something for which it does not have some of the required capabilities. This cannot be caught by a try block.

CmdFailed Const Text

A command failed in some "normal" way (e.g. a Move command could not move, or a Grab command found nothing to grab, etc.).

User Text

The user program explicitly called Undefined or Fail.

Instances

Instances details
FromJSON Exn Source # 
Instance details

Defined in Swarm.Game.Exception

ToJSON Exn Source # 
Instance details

Defined in Swarm.Game.Exception

Generic Exn Source # 
Instance details

Defined in Swarm.Game.Exception

Associated Types

type Rep Exn :: Type -> Type #

Methods

from :: Exn -> Rep Exn x #

to :: Rep Exn x -> Exn #

Show Exn Source # 
Instance details

Defined in Swarm.Game.Exception

Methods

showsPrec :: Int -> Exn -> ShowS #

show :: Exn -> String #

showList :: [Exn] -> ShowS #

Eq Exn Source # 
Instance details

Defined in Swarm.Game.Exception

Methods

(==) :: Exn -> Exn -> Bool #

(/=) :: Exn -> Exn -> Bool #

type Rep Exn Source # 
Instance details

Defined in Swarm.Game.Exception

data IncapableFix Source #

Suggested way to fix incapable error.

Constructors

FixByInstall

Install the missing device on yourself/target

FixByObtain

Add the missing device to your inventory

Instances

Instances details
FromJSON IncapableFix Source # 
Instance details

Defined in Swarm.Game.Exception

ToJSON IncapableFix Source # 
Instance details

Defined in Swarm.Game.Exception

Generic IncapableFix Source # 
Instance details

Defined in Swarm.Game.Exception

Associated Types

type Rep IncapableFix :: Type -> Type #

Show IncapableFix Source # 
Instance details

Defined in Swarm.Game.Exception

Eq IncapableFix Source # 
Instance details

Defined in Swarm.Game.Exception

type Rep IncapableFix Source # 
Instance details

Defined in Swarm.Game.Exception

type Rep IncapableFix = D1 ('MetaData "IncapableFix" "Swarm.Game.Exception" "swarm-0.2.0.0-D1mAmWsUEjoFqpCaq9DHG0" 'False) (C1 ('MetaCons "FixByInstall" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "FixByObtain" 'PrefixI 'False) (U1 :: Type -> Type))

formatExn :: EntityMap -> Exn -> Text Source #

Pretty-print an exception for displaying to the player.

Helper functions

formatIncapable :: EntityMap -> IncapableFix -> Requirements -> Term -> Text Source #

Pretty print the incapable exception with an actionable suggestion on how to fix it.

>>> w = mkEntity (defaultEntityDisplay 'l') "magic wand" [] [] [CAppear]
>>> r = mkEntity (defaultEntityDisplay 'o') "the one ring" [] [] [CAppear]
>>> m = buildEntityMap [w,r]
>>> incapableError cs t = putStr . unpack $ formatIncapable m FixByInstall cs t
>>> incapableError (R.singletonCap CGod) (TConst As)
Thou shalt not utter such blasphemy:
  'as'
  If God in troth thou wantest to play, try thou a Creative game.
>>> incapableError (R.singletonCap CAppear) (TConst Appear)
You do not have the devices required for:
  'appear'
  Please install:
  - the one ring or magic wand
>>> incapableError (R.singletonCap CRandom) (TConst Random)
Missing the random capability for:
  'random'
  but no device yet provides it. See
  https://github.com/swarm-game/swarm/issues/26
>>> incapableError (R.singletonInv 3 "tree") (TConst Noop)
You are missing required inventory for:
  'noop'
  Please obtain:
  - tree (3)