Send Beginners mailing list submissions to
        beginners@haskell.org

To subscribe or unsubscribe via the World Wide Web, visit
        http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
or, via email, send a message with subject or body 'help' to
        beginners-requ...@haskell.org

You can reach the person managing the list at
        beginners-ow...@haskell.org

When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."


Today's Topics:

   1. Re:  ffi array and peekArray (Sylvain Henry)
   2. Re:  ffi array and peekArray (PICCA Frederic-Emmanuel)
   3. Re:  ffi array and peekArray (Sylvain Henry)
   4.  Calling "zipWith" using "^" function. (Venu Chakravorty)
   5. Re:  Calling "zipWith" using "^" function. (yi lu)


----------------------------------------------------------------------

Message: 1
Date: Sun, 8 Nov 2015 18:34:52 +0100
From: Sylvain Henry <hsy...@gmail.com>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <beginners@haskell.org>
Subject: Re: [Haskell-beginners] ffi array and peekArray
Message-ID:
        <CAPmptcW52afFsMdPGa8wp8kfk6hvKAjc+Wjs6To+b=4vnsx...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

Hi,
you have to peek the pointed value. Something like:

hklFactoryGetAll :: IO [HklFactory]
hklFactoryGetAll = alloca $ \ptrn -> do
                 factories <- c_hkl_factory_get_all ptrn
                 n <- peek ptrn
                 peekArray n factories

2015-11-08 10:55 GMT+01:00 PICCA Frederic-Emmanuel <
frederic-emmanuel.pi...@synchrotron-soleil.fr>:

> Hello,
>
> Here the signature of one of my C function
>
> -- hkl.h --
>
> typedef struct _HklFactory HklFactory;
>
> HKLAPI HklFactory **hkl_factory_get_all(size_t *n) HKL_ARG_NONNULL(1);
>
> HKLAPI HklFactory *hkl_factory_get_by_name(const char *name,
>                                            GError **error)
> HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT;
>
> HKLAPI const char *hkl_factory_name_get(const HklFactory *self)
> HKL_ARG_NONNULL(1);
>
> HKLAPI HklGeometry *hkl_factory_create_new_geometry(const HklFactory
> *self) HKL_ARG_NONNULL(1);
>
> HKLAPI HklEngineList *hkl_factory_create_new_engine_list(const HklFactory
> *self) HKL_ARG_NONNULL(1);
>
>
> I will focuss for now only the get_all method. As you can see even for the
> C client of my  API HklFactory is an opac struct
> This get_all method return an array of (HklFactory *) and get the size of
> the array via the n parameter.
>
> So I am trying to use this API from haskell with the foreign system and
> return a [HklFactory]
>
> import Foreign (Ptr, peek)
> import Foreign.Marshal.Alloc (alloca)
> import Foreign.Marshal.Array (peekArray)
>
> data HklFactory
>
> foreign import ccall safe "hkl.h hkl_factory_get_all"
>         c_hkl_factory_get_all :: Ptr Int -> IO (Ptr HklFactory)
>
> hklFactoryGetAll :: IO [HklFactory]
> hklFactoryGetAll = alloca $ \n -> do
>                  factories <- c_hkl_factory_get_all n
>                  peekArray n factories
>
>
> but indeed it doesn not work, peekArray complain that n is Ptr Int instead
> of Int.
>
> what should I do in order to get my array of HklFactory
>
> thanks for your help.
>
>
> Frederic
> _______________________________________________
> Beginners mailing list
> Beginners@haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://mail.haskell.org/pipermail/beginners/attachments/20151108/44c49570/attachment-0001.html>

------------------------------

Message: 2
Date: Sun, 8 Nov 2015 20:30:13 +0000
From: PICCA Frederic-Emmanuel
        <frederic-emmanuel.pi...@synchrotron-soleil.fr>
To: "The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell" <beginners@haskell.org>
Subject: Re: [Haskell-beginners] ffi array and peekArray
Message-ID:
        
<a2a20ec3b8560d408356cac2fc148e53b2fae...@sun-dag3.synchrotron-soleil.fr>
        
Content-Type: text/plain; charset="Windows-1252"

Ok, so now I get this error 


ghkl.hs:20:18:
    No instance for (Foreign.Storable.Storable HklFactory)
      arising from a use of ?peekArray?
    In a stmt of a 'do' block: peekArray n factories
    In the expression:
      do { factories <- c_hkl_factory_get_all ptr;
           n <- peek ptr;
           peekArray n factories }
    In the second argument of ?($)?, namely
      ?\ ptr
         -> do { factories <- c_hkl_factory_get_all ptr;
                 n <- peek ptr;
                 .... }?


What should I do to create a Storable for HklFactory which is a simple pointer.

Thanks

Frederic

------------------------------

Message: 3
Date: Sun, 8 Nov 2015 21:45:39 +0100
From: Sylvain Henry <hsy...@gmail.com>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <beginners@haskell.org>
Subject: Re: [Haskell-beginners] ffi array and peekArray
Message-ID:
        <capmptcw9nexlj3qqglzuc9f-tajpovesrw8+lucf1c5pxpr...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

You can alias HklFactory:
type HklFactory = Ptr ()

Or if you want to avoid mixing HklFactory and other pointers, you can use:
newtype HklFactory = HklFactory (Ptr ()) deriving (Storable)

The latter requires the GeneralizedNewtypeDeriving extension, see:
https://wiki.haskell.org/Foreign_Function_Interface#Renaming_and_Storable_instances

Sylvain

2015-11-08 21:30 GMT+01:00 PICCA Frederic-Emmanuel <
frederic-emmanuel.pi...@synchrotron-soleil.fr>:

> Ok, so now I get this error
>
>
> ghkl.hs:20:18:
>     No instance for (Foreign.Storable.Storable HklFactory)
>       arising from a use of ?peekArray?
>     In a stmt of a 'do' block: peekArray n factories
>     In the expression:
>       do { factories <- c_hkl_factory_get_all ptr;
>            n <- peek ptr;
>            peekArray n factories }
>     In the second argument of ?($)?, namely
>       ?\ ptr
>          -> do { factories <- c_hkl_factory_get_all ptr;
>                  n <- peek ptr;
>                  .... }?
>
>
> What should I do to create a Storable for HklFactory which is a simple
> pointer.
>
> Thanks
>
> Frederic
> _______________________________________________
> Beginners mailing list
> Beginners@haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://mail.haskell.org/pipermail/beginners/attachments/20151108/8f93ff4f/attachment-0001.html>

------------------------------

Message: 4
Date: Sun, 8 Nov 2015 23:14:11 -0500
From: Venu Chakravorty <c.v...@aol.com>
To: beginners@haskell.org
Subject: [Haskell-beginners] Calling "zipWith" using "^" function.
Message-ID: <150ea73896a-2a1f-6...@webprd-a18.mail.aol.com>
Content-Type: text/plain; charset="utf-8"

Hello there,
This is just some toy program I was trying. I fail to understand why this works:



=============================
Prelude> zipWith (\ x y -> ((x ^ y) / (product [1..x]))) [1..3] [2,2,2]

[1.0,2.0,1.5]
=============================


and this does not:


=============================
Prelude> zipWith (\ x y -> ((y ^ x) / (product [1..x]))) [1..3] [2,2,2]


<interactive>:1:19:
    Ambiguous type variable `a' in the constraints:
      `Fractional a' arising from a use of `/' at <interactive>:1:19-44
      `Integral a' arising from a use of `^' at <interactive>:1:20-24
    Probable fix: add a type signature that fixes these type variable(s)
============================
Note that the "^" function has "x" and "y" flipped.


:t (^) says:
============================

(^) :: (Num a, Integral b) => a -> b -> a

============================


Could somebody please throw some light?



Thanks.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://mail.haskell.org/pipermail/beginners/attachments/20151108/11227543/attachment-0001.html>

------------------------------

Message: 5
Date: Mon, 9 Nov 2015 12:28:14 +0800
From: yi lu <zhiwudazhanjiang...@gmail.com>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <beginners@haskell.org>
Subject: Re: [Haskell-beginners] Calling "zipWith" using "^" function.
Message-ID:
        <CAKcmqqwo2BxOvWxJO0iS+JK5+JiyqRov+VdeeW=t=3rcz27...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

Prelude> :t (**)
(**) :: Floating a => a -> a -> a

On Mon, Nov 9, 2015 at 12:14 PM, Venu Chakravorty <c.v...@aol.com> wrote:

> Hello there,
> This is just some toy program I was trying. I fail to understand why this
> works:
>
> =============================
> Prelude> zipWith (\ x y -> ((x ^ y) / (product [1..x]))) [1..3] [2,2,2]
> [1.0,2.0,1.5]
> =============================
>
> and this does not:
>
> =============================
> Prelude> zipWith (\ x y -> ((y ^ x) / (product [1..x]))) [1..3] [2,2,2]
>
> <interactive>:1:19:
>     Ambiguous type variable `a' in the constraints:
>       `Fractional a' arising from a use of `/' at <interactive>:1:19-44
>       `Integral a' arising from a use of `^' at <interactive>:1:20-24
>     Probable fix: add a type signature that fixes these type variable(s)
> ============================
> Note that the "^" function has "x" and "y" flipped.
>
> :t (^) says:
> ============================
> (^) :: (Num a, Integral b) => a -> b -> a
> ============================
>
> Could somebody please throw some light?
>
> Thanks.
>
> _______________________________________________
> Beginners mailing list
> Beginners@haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://mail.haskell.org/pipermail/beginners/attachments/20151109/b87a6ef1/attachment.html>

------------------------------

Subject: Digest Footer

_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners


------------------------------

End of Beginners Digest, Vol 89, Issue 12
*****************************************

Reply via email to