[Haskell-beginners] while loop
Sylvain Henry
hsyl20 at gmail.com
Thu Feb 11 12:11:45 UTC 2016
Hi,
In these cases, I write the explicitly recursive version (e.g. getList1)
and look for a pattern (e.g. getList2).
getList1 :: Ptr List -> IO [Ptr Item]
getList1 l = c_get_first_item l >>= go
where
go e
| e == nullPtr = return []
| otherwise = do
next <- c_get_next_item l e
es <- go next
return (e:es)
getList2 :: Ptr List -> IO [Ptr Item]
getList2 l = c_get_first_item l >>= unfoldrM go
where
go e
| e == nullPtr = return Nothing
| otherwise = do
next <- c_get_next_item l e
return (Just (e,next))
I hope it helps
Sylvain
2016-02-11 12:02 GMT+01:00 PICCA Frederic-Emmanuel <
frederic-emmanuel.picca at synchrotron-soleil.fr>:
> Hello,
>
> I am playing with FFI and I need to extract from a C API a list of
> pointers.
>
> I have two methods available
>
> c_get_first_item :: Ptr List -> IO (Ptr Item)
> c_get_next_item :: Ptr List -> Ptr Item -> IO (Ptr Item)
>
> I would like to obtain a [Ptr Item]
>
> I try to used whileM but I did not find how to inject the first item in
> the loop.
>
> whileM (return . ( /= nullPtr)) (c_get_next_item list item)
>
> the c_get_next_item return a nullPtr when there is no remaining item.
>
> what is the haskell way in order to extract a list of pointer using these
> C methods ?
>
> thanks for your help
>
> Frederic
> _______________________________________________
> Beginners mailing list
> Beginners at 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/20160211/e623ab53/attachment.html>
More information about the Beginners
mailing list