40 lines
1.1 KiB
Haskell
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
|