Skip to content

Smaug123/fsharp-vectors

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

How?

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

Type-safe vectors in F#

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages