[FG42] Cube's spec

  • From: Sameer Rahmani <lxsameer@xxxxxxx>
  • To: fg42@xxxxxxxxxxxxx
  • Date: Fri, 02 Oct 2020 13:28:49 +0100


Hey folks,
I'd like to discuss the specification of the Cubes as we discussed
before.

I describe my idea of cubes and lets discuss them.

1. A Cube should be a unit of configuration for a specific
   ability. For example we might have a cube for flycheck.

2. A Cube can have other cubes and dependencies or may conflict
   with some other cubes

3. A Cube should be callable

4. A Cube should be idempotent and deterministic

5. Cubes should be composable

6. A Cube can be combosition of different cubes

7. Cubes by themselves shouldn't change the world. We need a Cube
   runner that takes a composition of Cubes and changes the world
   accordingly.

8. Cubes need to use some sort of api to interact with the world.
   For example in order to define a keybinding they have to use a
   specific api and not the one provided by emacs itself. Because
   they shouldn't change the world. That api should provide a way
   for any Cube to describe what changes has to be made to the
   world.

Based on these specs I think it makes sense to create a state monad
that represents the state of the world and each cube returns a monadic
function and a runner function which applys the state within the state
monad to the world aka setup the editor based on that state.

This way we can create some functors to help users dealing with the
cubes.

I'd like to hear your feedback and idea on this.

Cheers
Sameer

Other related posts: