1
1
mirror of https://github.com/github/semantic.git synced 2024-12-23 06:41:45 +03:00

FreeVariables1 instances

This commit is contained in:
Timothy Clem 2017-11-27 14:42:51 -08:00
parent 8ce14ba44d
commit 7afe9660f4
6 changed files with 22 additions and 11 deletions

View File

@ -5,6 +5,7 @@ import Abstract.Eval
import Abstract.Value
import Abstract.Type
import Abstract.Primitive
import Abstract.FreeVariables
import Control.Monad.Effect
import Algorithm hiding (Empty)
import Control.Applicative
@ -22,6 +23,7 @@ import Data.Functor.Classes.Show.Generic
import Data.Mergeable
import Data.Range
import Data.Record
import Data.Pointed
import Data.Semigroup
import Data.Span
import qualified Data.Syntax.Assignment as Assignment
@ -118,8 +120,11 @@ instance Show1 Identifier where liftShowsPrec = genericLiftShowsPrec
instance (Monad m) => Eval l (Value s a l) m s a Identifier
instance (Monad m) => Eval l Type m s a Identifier
instance FreeVariables1 Identifier where
liftFreeVariables _ (Identifier x) = point x
newtype Program a = Program [a]
deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable)
deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable, FreeVariables1)
instance Eq1 Program where liftEq = genericLiftEq
instance Ord1 Program where liftCompare = genericLiftCompare
@ -145,7 +150,7 @@ instance Show1 AccessibilityModifier where liftShowsPrec = genericLiftShowsPrec
--
-- This can be used to represent an implicit no-op, e.g. the alternative in an 'if' statement without an 'else'.
data Empty a = Empty
deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable)
deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable, FreeVariables1)
instance Eq1 Empty where liftEq _ _ _ = True
instance Ord1 Empty where liftCompare _ _ _ = EQ
@ -159,7 +164,7 @@ instance (Monad m) => Eval l Type m s a Empty where
-- | Syntax representing a parsing or assignment error.
data Error a = Error { errorCallStack :: ErrorStack, errorExpected :: [String], errorActual :: Maybe String, errorChildren :: [a] }
deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable)
deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable, FreeVariables1)
instance Eq1 Error where liftEq = genericLiftEq
instance Ord1 Error where liftCompare = genericLiftCompare
@ -191,7 +196,7 @@ instance Ord ErrorStack where
data Context a = Context { contextTerms :: NonEmpty a, contextSubject :: a }
deriving (Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable)
deriving (Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable, FreeVariables1)
instance Diffable Context where
subalgorithmFor blur focus (Context n s) = Context <$> traverse blur n <*> focus s

View File

@ -5,6 +5,7 @@ import Abstract.Eval
import Abstract.Value
import Abstract.Primitive
import Abstract.Type
import Abstract.FreeVariables
import Algorithm
import Data.Align.Generic
import Data.ByteString (ByteString)
@ -16,7 +17,7 @@ import GHC.Generics
-- | An unnested comment (line or block).
newtype Comment a = Comment { commentContent :: ByteString }
deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable)
deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable, FreeVariables1)
instance Eq1 Comment where liftEq = genericLiftEq
instance Ord1 Comment where liftCompare = genericLiftCompare

View File

@ -4,6 +4,7 @@ module Data.Syntax.Declaration where
import Abstract.Eval
import Abstract.Value
import Abstract.Type
import Abstract.FreeVariables
import Algorithm
import Data.Align.Generic
import Data.Functor.Classes.Eq.Generic
@ -13,7 +14,7 @@ import Data.Mergeable
import GHC.Generics
data Function a = Function { functionContext :: ![a], functionName :: !a, functionParameters :: ![a], functionBody :: !a }
deriving (Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable)
deriving (Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable, FreeVariables1)
instance Diffable Function where
equivalentBySubterm = Just . functionName

View File

@ -4,6 +4,7 @@ module Data.Syntax.Expression where
import Abstract.Eval
import Abstract.Value
import Abstract.Type
import Abstract.FreeVariables
import Algorithm
import Data.Align.Generic
import Data.Functor.Classes.Eq.Generic
@ -14,7 +15,7 @@ import GHC.Generics
-- | Typical prefix function application, like `f(x)` in many languages, or `f x` in Haskell.
data Call a = Call { callContext :: ![a], callFunction :: !a, callParams :: ![a], callBlock :: !a }
deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable)
deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable, FreeVariables1)
instance Eq1 Call where liftEq = genericLiftEq
instance Ord1 Call where liftCompare = genericLiftCompare

View File

@ -5,6 +5,7 @@ import Abstract.Eval
import Abstract.Value
import Abstract.Type
import Abstract.Primitive
import Abstract.FreeVariables
import Algorithm
import Data.Align.Generic
import Data.Maybe
@ -20,7 +21,7 @@ import Prelude
-- Boolean
newtype Boolean a = Boolean Bool
deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable)
deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable, FreeVariables1)
true :: Boolean a
true = Boolean True
@ -43,7 +44,7 @@ instance (Monad m) => Eval l Type m s a Boolean where
-- | A literal integer of unspecified width. No particular base is implied.
newtype Integer a = Integer { integerContent :: ByteString }
deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable)
deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable, FreeVariables1)
instance Eq1 Data.Syntax.Literal.Integer where liftEq = genericLiftEq
instance Ord1 Data.Syntax.Literal.Integer where liftCompare = genericLiftCompare
@ -107,7 +108,7 @@ instance Show1 InterpolationElement where liftShowsPrec = genericLiftShowsPrec
-- | A sequence of textual contents within a string literal.
newtype TextElement a = TextElement { textElementContent :: ByteString }
deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable)
deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable, FreeVariables1)
instance Eq1 TextElement where liftEq = genericLiftEq
instance Ord1 TextElement where liftCompare = genericLiftCompare

View File

@ -4,6 +4,7 @@ module Data.Syntax.Type where
import Abstract.Eval
import Abstract.Value
import Abstract.Type
import Abstract.FreeVariables
import Algorithm
import Data.Align.Generic
import Data.Functor.Classes.Eq.Generic
@ -12,8 +13,9 @@ import Data.Functor.Classes.Show.Generic
import Data.Mergeable
import GHC.Generics
-- TODO: What about type variables? re: FreeVariables1
data Annotation a = Annotation { annotationSubject :: !a, annotationType :: !a }
deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable)
deriving (Diffable, Eq, Foldable, Functor, GAlign, Generic1, Mergeable, Ord, Show, Traversable, FreeVariables1)
instance Eq1 Annotation where liftEq = genericLiftEq
instance Ord1 Annotation where liftCompare = genericLiftCompare