{-# LANGUAGE ScopedTypeVariables #-} module Cardano.Slotting.EpochInfo.Impl ( fixedSizeEpochInfo, ) where import Cardano.Slotting.EpochInfo.API import Cardano.Slotting.Slot (EpochNo (..), EpochSize (..), SlotNo (..)) fixedSizeEpochInfo :: Monad m => EpochSize -> EpochInfo m fixedSizeEpochInfo :: EpochSize -> EpochInfo m fixedSizeEpochInfo (EpochSize Word64 size) = EpochInfo :: forall (m :: * -> *). (HasCallStack => EpochNo -> m EpochSize) -> (HasCallStack => EpochNo -> m SlotNo) -> (HasCallStack => SlotNo -> m EpochNo) -> EpochInfo m EpochInfo { epochInfoSize_ :: HasCallStack => EpochNo -> m EpochSize epochInfoSize_ = \EpochNo _ -> EpochSize -> m EpochSize forall (m :: * -> *) a. Monad m => a -> m a return (EpochSize -> m EpochSize) -> EpochSize -> m EpochSize forall a b. (a -> b) -> a -> b $ Word64 -> EpochSize EpochSize Word64 size, epochInfoFirst_ :: HasCallStack => EpochNo -> m SlotNo epochInfoFirst_ = \(EpochNo Word64 epochNo) -> SlotNo -> m SlotNo forall (m :: * -> *) a. Monad m => a -> m a return (SlotNo -> m SlotNo) -> SlotNo -> m SlotNo forall a b. (a -> b) -> a -> b $ Word64 -> SlotNo SlotNo (Word64 epochNo Word64 -> Word64 -> Word64 forall a. Num a => a -> a -> a * Word64 size), epochInfoEpoch_ :: HasCallStack => SlotNo -> m EpochNo epochInfoEpoch_ = \(SlotNo Word64 slot) -> EpochNo -> m EpochNo forall (m :: * -> *) a. Monad m => a -> m a return (EpochNo -> m EpochNo) -> EpochNo -> m EpochNo forall a b. (a -> b) -> a -> b $ Word64 -> EpochNo EpochNo (Word64 slot Word64 -> Word64 -> Word64 forall a. Integral a => a -> a -> a `div` Word64 size) }