AERN-Real-Interval-2011.1: src/Numeric/AERN/Basics/Interval/Mutable.hs
{-# LANGUAGE TypeFamilies #-}
{-|
Module : Numeric.AERN.Basics.Interval.Mutable
Description : mutable version of Interval
Copyright : (c) Michal Konecny
License : BSD3
Maintainer : mikkonecny@gmail.com
Stability : experimental
Portability : portable
Mutable version of Interval.
This is a private module reexported publicly via its parent.
-}
module Numeric.AERN.Basics.Interval.Mutable where
import Numeric.AERN.Basics.Interval.Basics
import Numeric.AERN.Basics.Mutable
import Numeric.AERN.RealArithmetic.ExactOps
instance (CanBeMutable e) => CanBeMutable (Interval e) where
data Mutable (Interval e) s =
MInterval { mIntervalLeft :: Mutable e s, mIntervalRight :: Mutable e s }
makeMutable (Interval l r) =
do
lM <- makeMutable l
rM <- makeMutable r
return $ MInterval lM rM
unsafeMakeMutable (Interval l r) =
do
lM <- unsafeMakeMutable l
rM <- unsafeMakeMutable r
return $ MInterval lM rM
writeMutable (MInterval lM rM) (Interval l r) =
do
writeMutable lM l
writeMutable rM r
unsafeWriteMutable (MInterval lM rM) (Interval l r) =
do
unsafeWriteMutable lM l
unsafeWriteMutable rM r
readMutable (MInterval lM rM) =
do
l <- readMutable lM
r <- readMutable rM
return $ Interval l r
unsafeReadMutable (MInterval lM rM) =
do
l <- unsafeReadMutable lM
r <- unsafeReadMutable rM
return $ Interval l r