6

Github GitHub - Smaug123/fsharp-vectors: Type-safe vectors in F#

 2 years ago
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.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK