
On Wed, Mar 11, 2015 at 5:56 PM, Adam Bergmark
If I understand you correctly you seem to want dependent types, this article uses the same example you need, promoting the length of a vector/list to the type level: https://www.fpcomplete.com/user/konn/prove-your-haskell-for-great-safety/dep...
You'd end up with `plot :: (Vector n Double -> Double) -> Vector n (Double, Double) -> IO ()' where `n' is the length of the vector.
It seems like tuples are more straightforward: class Plot x where plot :: (x -> Double) -> x -- ^ lower bound -> x -- ^ upper bound -> IO () instance Plot Double where plot = plot2d instance Plot (Double,Double) where plot = plot3d And then that lets you do something like: instance Plot (Double, Shingle Double) where plot = plot2d_faceted -- | https://stat.ethz.ch/R-manual/R-devel/library/lattice/html/shingles.html data Shingle a = Shingle [(a,a)] a Regards, Adam Vogt