Shpadoinkle-debug: Debugging tools for Shpadoinkle applications.

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

Shpadoinkle tooling is a work in progress. But some useful functions have already emerged. This repo centeralizes these functions, and will house future work on more robust tooling, such as time travel debugging.


[Skip to Readme]

Properties

Versions 0.0.0.1, 0.0.0.1
Change log CHANGELOG.md
Dependencies aeson, base (>=4.12.0 && <4.16), jsaddle (>=0.9.7 && <0.20), lens, text, unliftio [details]
License BSD-3-Clause
Author Isaac Shapira
Maintainer fresheyeball@protonmail.com
Category Web
Source repo head: git clone https://gitlab.com/fresheyeball/Shpadoinkle.git
Uploaded by fresheyeball at 2020-06-21T22:05:33Z

Modules

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for Shpadoinkle-debug-0.0.0.1

[back to package description]

Shpadoinkle Debug

Goldwater BSD-3 built with nix Hackage Hackage Deps Hackage CI

This package exposes some useful debugging functions for tracing the state of Shpadoinkle applications as they change over time. It exposes 2 type classes currently.

class LogJS (c :: Type -> Constraint) where
  logJS :: c a => a -> JSM ()

class LogJS c => Trapper c where
  trapper :: c a => JSContextRef -> a -> a

These are intended to by used with TypeApplications, so you can choose the means of conversion before passing to console.log. For example:

main :: IO ()
main = runJSorWarp 8080 $ do
  ctx <- askJSM
  simple runParDiff initial (view . trapper @ToJSON ctx) getBody

Will log all state by first encoding to JSON with Aeson, then then logging with JSON.parse so the browser console has the nice native display. If we change it to trapper @Show ctx it will use the Show instance instead.