{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ViewPatterns #-}

module Unison.UnisonFile.Env (Env (..), datas) where

import Unison.DataDeclaration (DataDeclaration, EffectDeclaration (..))
import Unison.Names (Names)
import Unison.Prelude
import Unison.Reference (Reference)
import Unison.Reference qualified as Reference

data Env v a = Env
  -- Data declaration name to hash and its fully resolved form
  { forall v a. Env v a -> Map v (Id, DataDeclaration v a)
datasId :: Map v (Reference.Id, DataDeclaration v a),
    -- Effect declaration name to hash and its fully resolved form
    forall v a. Env v a -> Map v (Id, EffectDeclaration v a)
effectsId :: Map v (Reference.Id, EffectDeclaration v a),
    -- Naming environment
    forall v a. Env v a -> Names
names :: Names
  }

datas :: Env v a -> Map v (Reference, DataDeclaration v a)
datas :: forall v a. Env v a -> Map v (Reference, DataDeclaration v a)
datas = ((Id, DataDeclaration v a) -> (Reference, DataDeclaration v a))
-> Map v (Id, DataDeclaration v a)
-> Map v (Reference, DataDeclaration v a)
forall a b. (a -> b) -> Map v a -> Map v b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Id -> Reference)
-> (Id, DataDeclaration v a) -> (Reference, DataDeclaration v a)
forall a b c. (a -> b) -> (a, c) -> (b, c)
forall (p :: * -> * -> *) a b c.
Bifunctor p =>
(a -> b) -> p a c -> p b c
first Id -> Reference
forall h t. Id' h -> Reference' t h
Reference.DerivedId) (Map v (Id, DataDeclaration v a)
 -> Map v (Reference, DataDeclaration v a))
-> (Env v a -> Map v (Id, DataDeclaration v a))
-> Env v a
-> Map v (Reference, DataDeclaration v a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Env v a -> Map v (Id, DataDeclaration v a)
forall v a. Env v a -> Map v (Id, DataDeclaration v a)
datasId