make :: (Show v, Var v) => Logger
     -> IO (Codebase IO v Reference (Type v) (Term v), Term v -> Noted IO (Term v))
make logger = do
  store <- MemStore.make :: IO (Store IO v)
  code <- pure $ Codebase.make hash store
  let builtins = Builtin.make logger
  Codebase.addBuiltins builtins store code
  pure (code, Codebase.interpreter builtins code)
make :: (Show v, Var v) => Logger
     -> IO (Codebase IO v Reference (Type v) (Term v), Term v -> Noted IO (Term v))
make logger = do
  store <- MemStore.make :: IO (Store IO v)
  code <- pure $ Codebase.make hash store
  let builtins = Builtin.make logger
  Codebase.addBuiltins builtins store code
  pure (code, Codebase.interpreter builtins code)
make logger = do
  store <- MemStore.make :: IO (Store IO v)
  code <- pure $ Codebase.make hash store
  let builtins = Builtin.make logger
  Codebase.addBuiltins builtins store code
  pure (code, Codebase.interpreter builtins code)