module Unison.Hashing.V2.TermEdit (TermEdit (..)) where

import Unison.Hashing.V2.Referent (Referent)
import Unison.Hashing.V2.Tokenizable (Tokenizable)
import Unison.Hashing.V2.Tokenizable qualified as H

data TermEdit
  = TermEditReplace Referent
  | TermEditDeprecate
  deriving (TermEdit -> TermEdit -> Bool
(TermEdit -> TermEdit -> Bool)
-> (TermEdit -> TermEdit -> Bool) -> Eq TermEdit
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TermEdit -> TermEdit -> Bool
== :: TermEdit -> TermEdit -> Bool
$c/= :: TermEdit -> TermEdit -> Bool
/= :: TermEdit -> TermEdit -> Bool
Eq, Eq TermEdit
Eq TermEdit =>
(TermEdit -> TermEdit -> Ordering)
-> (TermEdit -> TermEdit -> Bool)
-> (TermEdit -> TermEdit -> Bool)
-> (TermEdit -> TermEdit -> Bool)
-> (TermEdit -> TermEdit -> Bool)
-> (TermEdit -> TermEdit -> TermEdit)
-> (TermEdit -> TermEdit -> TermEdit)
-> Ord TermEdit
TermEdit -> TermEdit -> Bool
TermEdit -> TermEdit -> Ordering
TermEdit -> TermEdit -> TermEdit
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: TermEdit -> TermEdit -> Ordering
compare :: TermEdit -> TermEdit -> Ordering
$c< :: TermEdit -> TermEdit -> Bool
< :: TermEdit -> TermEdit -> Bool
$c<= :: TermEdit -> TermEdit -> Bool
<= :: TermEdit -> TermEdit -> Bool
$c> :: TermEdit -> TermEdit -> Bool
> :: TermEdit -> TermEdit -> Bool
$c>= :: TermEdit -> TermEdit -> Bool
>= :: TermEdit -> TermEdit -> Bool
$cmax :: TermEdit -> TermEdit -> TermEdit
max :: TermEdit -> TermEdit -> TermEdit
$cmin :: TermEdit -> TermEdit -> TermEdit
min :: TermEdit -> TermEdit -> TermEdit
Ord, Int -> TermEdit -> ShowS
[TermEdit] -> ShowS
TermEdit -> String
(Int -> TermEdit -> ShowS)
-> (TermEdit -> String) -> ([TermEdit] -> ShowS) -> Show TermEdit
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TermEdit -> ShowS
showsPrec :: Int -> TermEdit -> ShowS
$cshow :: TermEdit -> String
show :: TermEdit -> String
$cshowList :: [TermEdit] -> ShowS
showList :: [TermEdit] -> ShowS
Show)

instance Tokenizable TermEdit where
  tokens :: TermEdit -> [Token]
tokens (TermEditReplace Referent
r) = [Word8 -> Token
H.Tag Word8
0] [Token] -> [Token] -> [Token]
forall a. [a] -> [a] -> [a]
++ Referent -> [Token]
forall t. Tokenizable t => t -> [Token]
H.tokens Referent
r
  tokens TermEdit
TermEditDeprecate = [Word8 -> Token
H.Tag Word8
1]