{-# language DeriveGeneric #-} {-# language DeriveDataTypeable #-} {-# language GeneralizedNewtypeDeriving #-} {-# language MultiParamTypeClasses #-} {-# language TypeFamilies #-} {-# language FlexibleContexts #-} {-# language UndecidableInstances #-} --------------------------------------------------------------------------------- -- | -- Copyright : (c) Edward Kmett 2017-2018 -- License : BSD-2-Clause OR Apache-2.0 -- Maintainer: Edward Kmett -- Stability : experimental -- Portability: non-portable -- -- Stuff we an measure in UTF-16 code units --------------------------------------------------------------------------------- module Relative.Delta.Type ( Delta(..) ) where import Data.Data import Data.Default import Data.Hashable import Data.Semigroup import GHC.Generics import Text.Read import Prelude -- | A count of UTF-16 code-units. -- -- This forms an (obvious) Abelian group unlike -- the merely monoidal pairs of line and column. -- -- It is also very compact fitting in a single 'Int'. newtype Delta = Delta Int deriving (Eq, Ord, Data, Generic, Num) instance Show Delta where showsPrec d (Delta n) = showsPrec d n instance Read Delta where readPrec = Delta <$> readPrec instance Hashable Delta instance Default Delta where def = Delta def instance Semigroup Delta where (<>) = (+) instance Monoid Delta where mempty = 0 mappend = (+)