ArrayT
ArrayT is an F# extension and module library for Array<'T>
It also works in Javascript and Typescript with Fable.
Motivation
I was always annoyed that an IndexOutOfRangeException does not include the actual index that was out of bounds nor the actual size of the array.
This library fixes that in array.Get
, array.Set
, array.Slice
and other item access functions.
This library was designed for use with F# scripting.
Functions and methods never return null.
Only functions starting with try...
will return an F# Option.
Otherwise when a function fails on invalid input it will throw a descriptive exception.
See also https://github.com/goswinr/ResizeArray/ for a similar library for ResizeArray<'T>
.
It Includes:
-
An
Array
module that has a additional functions to theArray
module fromFSharp.Core
.
See docs -
Extension members on
Array
like
.Get(idx)
.Set(idx,item)
.First
.Last
.SecondLast
xs.DebugIdx.[i]
and more..
With nicer IndexOutOfRangeExceptions that include the bad index and the actual size.
See docs
Usage
Just open the namespace
open ArrayT
this namespace contains:
a module also called
Array
. It will add additional functions to theArray
module fromFSharp.Core
.this will also auto open the extension members on
Array<'T>
Example
#r "nuget: ArrayT"
open ArrayT
let xs = [| 0 .. 88 |]
xs.Get(99)
throws
System.IndexOutOfRangeException: Array.Get: Can't get index 99 from:
array<Int32> with 89 items:
0: 0
1: 1
2: 2
3: 3
4: 4
...
88: 88
instead of the usual
System.IndexOutOfRangeException: Index was outside the bounds of the array.
If you want to use the index notation xs.[i]
instead of the Get method you can use the DebugIdx
member
xs.DebugIdx.[i]
Full API Documentation
Tests
All Tests run in both javascript and dotnet. Successful Fable compilation to typescript is verified too. Go to the tests folder:
|
For testing with .NET using Expecto:
|
for JS testing with Fable.Mocha and TS verification:
|
License
Changelog
see CHANGELOG.md
type IndexOutOfRangeException = inherit SystemException new: unit -> unit + 2 overloads
<summary>The exception that is thrown when an attempt is made to access an element of an array or collection with an index that is outside its bounds.</summary>
--------------------
System.IndexOutOfRangeException() : System.IndexOutOfRangeException
System.IndexOutOfRangeException(message: string) : System.IndexOutOfRangeException
System.IndexOutOfRangeException(message: string, innerException: exn) : System.IndexOutOfRangeException
module Array from ArrayT
<summary> The main module for functions on Array<'T>. This module provides additional functions to ones from FSharp.Core.Array module. </summary>
--------------------
module Array from Microsoft.FSharp.Collections