[Haskell-cafe] Mathematical functions with multiple arguments

adam vogt vogt.adam at gmail.com
Thu Mar 12 02:58:31 UTC 2015

On Wed, Mar 11, 2015 at 5:56 PM, Adam Bergmark <adam at bergmark.nl> wrote:

> 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/dependent-types-in-haskell
> 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

-- |
data Shingle a = Shingle [(a,a)] a

Adam Vogt
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20150311/35bbd64d/attachment.html>

More information about the Haskell-Cafe mailing list