Files
loop/src/NewInt.hs
T

40 lines
1.1 KiB
Haskell

{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
--{-# LANGUAGE StandaloneDeriving #-}
module NewInt where
import Control.Lens
import Data.Aeson
import Data.Aeson.TH
import qualified Data.IntMap.Strict as IM
import qualified Data.IntSet as IS
newtype NewInt a = NInt {_unNInt :: Int}
deriving newtype (Eq, Ord, Show, Num, Read, Integral, Real, Enum)
newtype NewIntSet a = NIntSet {_unNIntSet :: IS.IntSet}
deriving newtype (Eq, Ord, Show, Read)
newtype NewIntMap a b = NIntMap {_unNIntMap :: IM.IntMap b}
deriving newtype (Foldable, Functor, Monoid, Semigroup)
deriving (Eq, Ord, Show, Read)
type instance Index (NewIntMap a b) = NewInt a
type instance IxValue (NewIntMap a b) = b
instance Ixed (NewIntMap a b) where
ix (NInt i) f (NIntMap m) = fmap NIntMap (ix i f m)
instance At (NewIntMap a b) where
at (NInt i) f (NIntMap m) = fmap NIntMap (at i f m)
makeLenses ''NewInt
makeLenses ''NewIntMap
deriveJSON defaultOptions ''NewInt
deriveJSON defaultOptions ''NewIntMap