Popularity
7.6
Growing
Activity
5.0
-
21
3
9

Monthly Downloads: 168
Programming language: Haskell
License: BSD 3-clause "New" or "Revised" License
Tags: Math     Data     Dependent Types     Singletons    

fin alternatives and similar packages

Based on the "Data" category.
Alternatively, view fin alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of fin or a related project?

Add another 'Data' Package

README

fin and vec

Vec

vec provides few approache to work with Vec:

  • naive: explicit recusion
    • no need to keep constraints around for most functions
    • simple
    • slow
  • pull: Vec n a represented as Fin n -> a
    • Fuses well
    • Some code is hard to write (e.g. Traversable)
    • relatively simple
  • inline, using InlineInduction:
    • exploits how GHC dictionary resolution works
    • makes code to unroll completely for staticaly known sizes
    • fast in that case

Dependencies

And with dependency flags turned off:

Benchmarks: dotProduct

  • list version sets the baseline, built-in fusion seems to kick in.
  • vector and unboxed vector are 3x slower.
  • this library, naive vec is even slower
  • Data.Vec.Pull approach is slower, except
  • that without conversions it's up to speed with vector
  • inline (using InlineInduction over size) is faster than list version.
benchmarking dot product/list
time                 23.73 ns   (23.61 ns .. 23.88 ns)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 23.69 ns   (23.58 ns .. 23.89 ns)
std dev              450.1 ps   (292.0 ps .. 731.3 ps)
variance introduced by outliers: 27% (moderately inflated)

benchmarking dot product/vector
time                 80.74 ns   (80.16 ns .. 81.42 ns)
                     0.999 R²   (0.999 R² .. 1.000 R²)
mean                 80.83 ns   (80.23 ns .. 82.21 ns)
std dev              2.760 ns   (1.657 ns .. 4.830 ns)
variance introduced by outliers: 53% (severely inflated)

benchmarking dot product/unboxed
time                 79.95 ns   (79.34 ns .. 80.74 ns)
                     0.999 R²   (0.999 R² .. 1.000 R²)
mean                 80.44 ns   (79.61 ns .. 82.51 ns)
std dev              4.278 ns   (2.029 ns .. 7.869 ns)
variance introduced by outliers: 74% (severely inflated)

benchmarking dot product/vec
time                 130.2 ns   (129.0 ns .. 131.6 ns)
                     0.999 R²   (0.999 R² .. 1.000 R²)
mean                 130.1 ns   (129.1 ns .. 131.7 ns)
std dev              4.185 ns   (3.108 ns .. 5.425 ns)
variance introduced by outliers: 49% (moderately inflated)

benchmarking dot product/pull
time                 245.3 ns   (245.1 ns .. 245.5 ns)
                     1.000 R²   (0.999 R² .. 1.000 R²)
mean                 246.3 ns   (244.7 ns .. 254.1 ns)
std dev              9.924 ns   (409.7 ps .. 22.69 ns)
variance introduced by outliers: 59% (severely inflated)

benchmarking dot product/pull'
time                 71.18 ns   (70.73 ns .. 71.64 ns)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 70.79 ns   (70.44 ns .. 71.30 ns)
std dev              1.397 ns   (925.3 ps .. 2.095 ns)
variance introduced by outliers: 27% (moderately inflated)

benchmarking dot product/inline
time                 20.91 ns   (20.64 ns .. 21.25 ns)
                     0.999 R²   (0.998 R² .. 0.999 R²)
mean                 21.12 ns   (20.90 ns .. 21.37 ns)
std dev              784.4 ps   (575.5 ps .. 1.107 ns)
variance introduced by outliers: 60% (severely inflated)