6
Github GitHub - Smaug123/fsharp-vectors: Type-safe vectors in F#
source link: https://github.com/Smaug123/fsharp-vectors
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
fsharp-vectors
Type-safe vectors in F#.
What?
let l1 = [ 1 ; 2 ] let l2 = [ 3 ] List.zip l1 l2 |> ignore
Oh no! Lists aren't safe!
let v1 = 1 ** 2 ** -() let v2 = 1 ** () Vector.zip v1 v2 // doesn't compile! |> ignore
Peano encoding of the naturals, basically.
We define a type Z
and a type S : * -> *
, and interpret S Z
as the number 1.
Syntax
I refuse to apologise for the syntax.
Vector.empty
can also be written-()
. (It's actually an overload of the unary-
.)Vector.cons
can also be written**
. (It had to be this way because we need right-associativity, and not that many symbols in F# have right-associativity.)
Efficiency
These things are actually not that bad at runtime, although on no account should you use VectorCrate
on the hot path.
I have yet to do any benchmarking, but I think they'll be pretty good.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK