Add comments to everything
This commit is contained in:
parent
a88fc5d9c6
commit
a499d14e87
5 changed files with 119 additions and 35 deletions
|
|
@ -4,6 +4,8 @@ import Data.IOArray.Prims
|
|||
|
||||
%default total
|
||||
|
||||
|
||||
||| A wrapper for Idris's primitive array type.
|
||||
export
|
||||
record PrimArray a where
|
||||
constructor MkPrimArray
|
||||
|
|
@ -26,6 +28,8 @@ arrayDataSet : Nat -> a -> ArrayData a -> IO ()
|
|||
arrayDataSet n x arr = fromPrim $ prim__arraySet arr (cast n) x
|
||||
|
||||
|
||||
||| Construct an array from a list of "instructions" to write a
|
||||
||| value to a particular index.
|
||||
export
|
||||
unsafeFromIns : Nat -> List (Nat, a) -> PrimArray a
|
||||
unsafeFromIns size ins = unsafePerformIO $ do
|
||||
|
|
@ -33,6 +37,8 @@ unsafeFromIns size ins = unsafePerformIO $ do
|
|||
for_ ins $ \(i,x) => arrayDataSet i x arr
|
||||
pure $ MkPrimArray size arr
|
||||
|
||||
||| Create an array given its size and a function to generate
|
||||
||| its elements by its index.
|
||||
export
|
||||
create : Nat -> (Nat -> a) -> PrimArray a
|
||||
create size f = unsafePerformIO $ do
|
||||
|
|
@ -47,10 +53,13 @@ create size f = unsafePerformIO $ do
|
|||
addToArray (S loc) n arr
|
||||
|
||||
|
||||
||| Index into a primitive array. This function is unsafe, as it
|
||||
||| performs no boundary check on the index given.
|
||||
export
|
||||
index : Nat -> PrimArray a -> a
|
||||
index n arr = unsafePerformIO $ arrayDataGet n $ content arr
|
||||
|
||||
||| A safe version of `index` that ensures the index entered is valid.
|
||||
export
|
||||
safeIndex : Nat -> PrimArray a -> Maybe a
|
||||
safeIndex n arr = if n < length arr
|
||||
|
|
@ -58,6 +67,7 @@ safeIndex n arr = if n < length arr
|
|||
else Nothing
|
||||
|
||||
|
||||
||| Convert a primitive array to a list.
|
||||
export
|
||||
toList : PrimArray a -> List a
|
||||
toList arr = iter (length arr) []
|
||||
|
|
@ -67,6 +77,7 @@ toList arr = iter (length arr) []
|
|||
iter (S n) acc = let el = index n arr
|
||||
in iter n (el :: acc)
|
||||
|
||||
||| Construct a primitive array from a list.
|
||||
export
|
||||
fromList : List a -> PrimArray a
|
||||
fromList xs = create (length xs)
|
||||
|
|
@ -76,6 +87,7 @@ fromList xs = create (length xs)
|
|||
fromJust : Maybe a -> a
|
||||
fromJust (Just x) = x
|
||||
|
||||
||| Map a function over a primitive array.
|
||||
export
|
||||
map : (a -> b) -> PrimArray a -> PrimArray b
|
||||
map f arr = create (length arr) (\n => f $ index n arr)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue