Files
loop/src/NewInt.hs
T
2025-08-25 10:21:59 +01:00

40 lines
1.1 KiB
Haskell

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE TypeFamilies #-}
--{-# LANGUAGE StandaloneDeriving #-}
module NewInt where
import qualified Data.IntSet as IS
import qualified Data.IntMap.Strict as IM
import Control.Lens
import Data.Aeson
import Data.Aeson.TH
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