dhall-1.42.0: src/Dhall/Syntax/Instances/Functor.hs
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# OPTIONS_GHC -Wno-orphans #-}
module Dhall.Syntax.Instances.Functor () where
import Dhall.Syntax.Binding
import Dhall.Syntax.Chunks
import Dhall.Syntax.Expr
import Dhall.Syntax.FunctionBinding
import {-# SOURCE #-} Dhall.Syntax.Operations (unsafeSubExpressions)
import Dhall.Syntax.RecordField
import Dhall.Syntax.Types
import qualified Lens.Family as Lens
deriving instance Functor (Binding s)
deriving instance Functor (Chunks s)
deriving instance Functor (RecordField s)
deriving instance Functor (FunctionBinding s)
deriving instance Functor FieldSelection
-- This instance is hand-written due to the fact that deriving
-- it does not give us an INLINABLE pragma. We annotate this fmap
-- implementation with this pragma below to allow GHC to, possibly,
-- inline the implementation for performance improvements.
instance Functor (Expr s) where
fmap f (Embed a) = Embed (f a)
fmap f (Let b e2) = Let (fmap f b) (fmap f e2)
fmap f (Note s e1) = Note s (fmap f e1)
fmap f (Record a) = Record $ fmap f <$> a
fmap f (RecordLit a) = RecordLit $ fmap f <$> a
fmap f (Lam cs fb e) = Lam cs (f <$> fb) (f <$> e)
fmap f (Field a b) = Field (f <$> a) b
fmap f expression = Lens.over unsafeSubExpressions (fmap f) expression
{-# INLINABLE fmap #-}