
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
Arraymodule that has a additional functions to theArraymodule fromFSharp.Core.
See docs -
Extension members on
Arraylike
.Get(idx).Set(idx,item).First.Last.SecondLastxs.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 theArraymodule 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
ArrayT