Skip to content

Instantly share code, notes, and snippets.

@evanrelf
Created September 20, 2025 05:38
Show Gist options
  • Save evanrelf/f6b7c828e13cb89498f94cf9998ea0c8 to your computer and use it in GitHub Desktop.
Save evanrelf/f6b7c828e13cb89498f94cf9998ea0c8 to your computer and use it in GitHub Desktop.
type Rebuilder c i k v = k -> v -> Task c k v -> Task (MonadState i) k v
type Scheduler c i j k v = Rebuilder c j k v -> Build c i k v
type Build c i k v = Tasks c k v -> k -> Store i k v -> Store i k v
data Store i k v = Store { info :: i, values :: k -> v }
type Tasks c k v = k -> Maybe (Task c k v)
type Task c k v = forall f. c f => (k -> f v) -> f v
shake :: (Ord k, Hashable v) => Build Monad (VT k v) k v
shake = suspending vtRebuilder
suspending :: forall i k v. Ord k => Scheduler Monad i i k v
vtRebuilder :: (Eq k, Hashable v) => Rebuilder Monad (VT k v) k v
newtype VT k v = VT [Trace k v (Hash v)]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment