interface Resource : (List Type -> Type -> Type) -> Type -> Typecleanup : a -> f [] ()cleanup : Resource f a => a -> f [] ()use1 : MCancel f => Resource f a => f es a -> (a -> f es b) -> f es bAllocate a resource, use it in a program, and make sure to release it
afterwards.
use : All (Resource f) ts => MCancel f => All (f es) ts -> (HList ts -> f es b) -> f es bLike `use1` but for a heterogeneous list of resources.