[Haskell-beginners] [Haskell-cafe] Mathematical functions with multiple arguments

Sumit Sahrawat, Maths & Computing, IIT (BHU) sumit.sahrawat.apm13 at iitbhu.ac.in
Thu Mar 12 00:19:25 UTC 2015


It's done. fixed-vector provides many implementations for Vec. The one I
was using (Primitive) requires primitive constraint on data types. I
shifted to Unboxed ones, and now it's working.

This means that I am able to use toList with Vec v (Double, Double), which
was previously complaining of missing constraints.

Also, I'll slowly convert the whole thing. I wanted to just see if it works
initially.
Thanks, once again.

On 12 March 2015 at 04:58, David Feuer <david.feuer at gmail.com> wrote:

> I'd urge you to *try* to maintain that safety throughout, but you can try
> something like this if necessary (I'm not at my computer, so I can't test
> it):
>
> {-#LANGUAGE FlexibleContexts, FlexibleInstances #-}
> instance Foldable (SL Z) where
>   foldr _ n Nil = n
>
> instance Foldable (SL n) => Foldable (SL (S n)) where
>   foldr c n (Cons x xs) = c x (foldr c n xs)
>
> In fact, I would expect whatever package you're looking at to offer this.
> Then you can just use Data.Foldable.toList.
> On Mar 11, 2015 7:16 PM, "Sumit Sahrawat, Maths & Computing, IIT (BHU)" <
> sumit.sahrawat.apm13 at iitbhu.ac.in> wrote:
>
>> The fixed-vector package uses a similar technique. The only trouble I'm
>> having is with converting Vec v (Double, Double) to [(Double, Double)] for
>> further use. I don't want to change all the code, but only the part where
>> the user provides me with arguments.
>>
>> I'll keep looking into it. Thanks for the help.
>>
>> On 12 March 2015 at 04:44, David Feuer <david.feuer at gmail.com> wrote:
>>
>>> There are a lot of ways to do this sort of thing, and which one you
>>> choose will depend on exactly what you're trying to do. For example, you
>>> can write something vaguely like
>>>
>>> data Nat = Z | S Nat
>>> data SL (n :: Nat) a where
>>>   Nil :: SL Z
>>>   Cons :: a -> SL n a -> SL (S n) a
>>>
>>> plot :: forall (n::Nat) . (SL n Double -> Double) ->
>>>                                         SL n (Double, Double) -> IO ()
>>> On Mar 11, 2015 5:45 PM, "Sumit Sahrawat, Maths & Computing, IIT (BHU)" <
>>> sumit.sahrawat.apm13 at iitbhu.ac.in> wrote:
>>>
>>>> Hi everybody,
>>>>
>>>> I have a function of type
>>>>
>>>>     plot :: ([Double] -> Double)    -- A function to plot
>>>>          -> [(Double, Double)]      -- Range for all arguments
>>>>          -> IO ()
>>>>
>>>> I want to enforce the fact that ranges for all arguments should be
>>>> provided.
>>>> Is there a way to make the type system enforce it?
>>>>
>>>> --
>>>> Regards
>>>>
>>>> Sumit Sahrawat
>>>>
>>>> _______________________________________________
>>>> Haskell-Cafe mailing list
>>>> Haskell-Cafe at haskell.org
>>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>>>>
>>>>
>>
>>
>> --
>> Regards
>>
>> Sumit Sahrawat
>>
>


-- 
Regards

Sumit Sahrawat
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20150312/f3c51926/attachment.html>


More information about the Beginners mailing list