Re: [Haskell-cafe] hoogle command line program on Linux
Hi Erik, I'll release Hoogle 4.1.3 with a fix later today. Thanks, Neil On Sun, Jan 9, 2011 at 5:07 AM, Erik de Castro Lopo mle...@mega-nerd.com wrote: Hi all, I'm testing out hoogle 4.1.2 on Debian Linux and getting the following when trying to update the local hoogle databases: erik sudo hoogle data Starting default Starting keyword hoogle: keyword.txt: commitAndReleaseBuffer: invalid argument (Invalid or incomplete multibyte or wide character) My LANG related envorinment variables are set as follows: erik env | grep LANG LANG=en_AU.UTF-8 GDM_LANG=en_AU.UTF-8 LANGUAGE=en_AU.UTF-8 LC_LANG=en_AU.UTF-8 When faced with a similar problem while working on Ben Lippmeier's compiler, I fixed this by replacing all instances of readFile with readUtf8File which is defined as: readUtf8File :: FilePath - IO String readUtf8File filePath = do h - openFile filePath ReadMode hSetEncoding h utf8 hSetEncoding stdout utf8 hGetContents h Is it possible to fix this without hacking the hoogles sources? I'd like to package hoogle for Debian, but first I need to get it working. Cheers, Erik -- -- Erik de Castro Lopo http://www.mega-nerd.com/ ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] hoogle command line program on Linux
Hi Erik, Hoogle 4.1.3 is now released, which reads and writes Hoogle input files in UTF8 throughout. Please let me know if this doesn't fix your problem. Thanks, Neil On Sun, Jan 9, 2011 at 11:22 AM, Neil Mitchell ndmitch...@gmail.com wrote: Hi Erik, I'll release Hoogle 4.1.3 with a fix later today. Thanks, Neil On Sun, Jan 9, 2011 at 5:07 AM, Erik de Castro Lopo mle...@mega-nerd.com wrote: Hi all, I'm testing out hoogle 4.1.2 on Debian Linux and getting the following when trying to update the local hoogle databases: erik sudo hoogle data Starting default Starting keyword hoogle: keyword.txt: commitAndReleaseBuffer: invalid argument (Invalid or incomplete multibyte or wide character) My LANG related envorinment variables are set as follows: erik env | grep LANG LANG=en_AU.UTF-8 GDM_LANG=en_AU.UTF-8 LANGUAGE=en_AU.UTF-8 LC_LANG=en_AU.UTF-8 When faced with a similar problem while working on Ben Lippmeier's compiler, I fixed this by replacing all instances of readFile with readUtf8File which is defined as: readUtf8File :: FilePath - IO String readUtf8File filePath = do h - openFile filePath ReadMode hSetEncoding h utf8 hSetEncoding stdout utf8 hGetContents h Is it possible to fix this without hacking the hoogles sources? I'd like to package hoogle for Debian, but first I need to get it working. Cheers, Erik -- -- Erik de Castro Lopo http://www.mega-nerd.com/ ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Set monad
On Sun, Jan 9, 2011 at 7:45 AM, Sebastian Fischer fisc...@nii.ac.jp wrote: [...] Only conversion to the underlying Set type requires an Ord constraint. getSet :: Ord a = Set a - S.Set a getSet a = a - S.singleton this unfortunately also means that duplicated elements only get filtered out at the points where you use getSet, so in getSet ((return 1 `mplus` return 1) = k) k gets still called twice ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Set monad
That looks like it looses the efficiency of the underlying representation. On Sun, Jan 9, 2011 at 6:45 AM, Sebastian Fischer fisc...@nii.ac.jp wrote: On Sun, Jan 9, 2011 at 6:53 AM, Lennart Augustsson lenn...@augustsson.net wrote: It so happens that you can make a set data type that is a Monad, but it's not exactly the best possible sets. module SetMonad where newtype Set a = Set { unSet :: [a] } Here is a version that also does not require restricted monads but works with an arbitrary underlying Set data type (e.g. from Data.Set). It uses continuations with a Rank2Type. import qualified Data.Set as S newtype Set a = Set { (-) :: forall b . Ord b = (a - S.Set b) - S.Set b } instance Monad Set where return x = Set ($x) a = f = Set (\k - a - \x - f x - k) Only conversion to the underlying Set type requires an Ord constraint. getSet :: Ord a = Set a - S.Set a getSet a = a - S.singleton A `MonadPlus` instance can lift `empty` and `union`. instance MonadPlus Set where mzero = Set (const S.empty) mplus a b = Set (\k - S.union (a - k) (b - k)) Maybe, Heinrich Apfelmus's operational package [1] can be used to do the same without continuations. [1]: http://projects.haskell.org/operational/ ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] GHC.Ptr, Foreign.Storable, Data.Storable.Endian, looking for good examples of usage
Hi, I am trying to work out how to use GHC.Ptr, Foreign.Storable, Data.Storable.Endian, and am looking for good examples of usage. Many thanks in advance, Aaron ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] ANNOUNCE: Monad.Reader Issue 17
I am pleased to announce that Issue 17 of The Monad.Reader is now available [1]. Issue 17 consists of the following three articles: * List Leads Off with the Letter Lambda by Douglas M. Auclair * The InterleaveT Abstraction: Alternative with Flexible Ordering by Neil Brown * The Reader Monad and Abstraction Elimination by Petr Pudlak Feel free to browse the source files [2]. You can check out the entire repository using darcs: darcs get http://code.haskell.org/~byorgey/TMR/Issue17 Watch for a special announcement regarding Issue 18 soon! [1] http://themonadreader.files.wordpress.com/2011/01/issue17.pdf [2] http://code.haskell.org/~byorgey/TMR/Issue17 ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] [Haskell-beginners] theStdGen unsafePerformIO
You might get more answers to this sort of question on the haskell-cafe list. Even there, I think you might need to ask whoever the authors were for a question like this :-) On Sun, Jan 9, 2011 at 9:55 AM, John Smith volderm...@hotmail.com wrote: Why does theStdGen require unsafePerformIO? I recompiled the Random module with theStdGen :: IO (IORef StdGen) theStdGen = do rng - mkStdRNG 0 newIORef rng The implementations of a few functions needed to change slightly (to extract the IORef from IO), but no other type signatures needed changing, and nothing blew up. ___ Beginners mailing list beginn...@haskell.org http://www.haskell.org/mailman/listinfo/beginners ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] ANN: nanoparsec 0.1
On 09/01/11 00:46, Maciej Piechotka wrote: Nanoparsec is currently simply a port of attoparsec on the ListLike (the abstraction of lists used by iteratee). It allows to achive in parsing a near-attoparsec levels of speed (benchmarks from attoparsec library shown a 0.450 ± 0.028 for attoparsec, 0.479 ± 0.043 for nanoparsec and 1.532 ± 0.084 for parsec 3) combining the flexibility of stream of parsec 3 with the iterative approach and speed of attoparsec. It's a bit unfortunate that it requires base 4.3, GHC 7 hasn't made it into a lot of distros yet so that causes a lot of extra work when wanting to try it out :-( /M -- Magnus Therning OpenPGP: 0xAB4DFBA4 email: mag...@therning.org jabber: mag...@therning.org twitter: magthe http://therning.org/magnus signature.asc Description: OpenPGP digital signature ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] web-routes and forms
Hello, newRule also needs to have the type, RoutedNomicServer. The transformation of RoutedNomicServer into NomicServer is done in the handleSite function. Something like this: nomicSpec :: ServerHandle - Site Route (ServerPartT IO Response) nomicSpec sh = Site { handleSite = \f url - unRouteT (nomicSite sh url) f ... main = do ... simpleHTTP nullConf $ siteImpl (nomicSpec sh) Or something like that -- it's hard to tell exactly what is going on in your app based on the snippets you provided. Also, I highly recommend using digestive functors instead of formlets. It is the successor to formlets. Same core idea, better implementation and actively maintained. I have attached a quick demo of using: happstack+digestive-functors+web-routes+HSP To use it you will need the latest happstack from darcs plus: hsp web-routes web-routes-hsp web-routes-happstack web-routes-mtl digestive-functors digestive-functors-hsp I plan to clean up this example and document it better in the crash course for the upcoming release. Clearly things like the FormInput instance and the formPart function belong a library. let me know if you have more questions. - jeremy On Sat, Jan 8, 2011 at 6:44 PM, Corentin Dupont corentin.dup...@gmail.com wrote: Hello, I have difficulties mixing web-routes and forms: I have put routes in all my site, except for forms which remains with the type ServerPartT IO Response. How to make them work together? I have: type NomicServer = ServerPartT IO type RoutedNomicServer = RouteT PlayerCommand NomicServer newRule :: ServerHandle - NomicServer Response newRule sh = do methodM POST -- only accept a post method mbEntry - getData -- get the data case mbEntry of Nothing - error $ error: newRule Just (NewRule name text code pn) - do html - nomicPageComm pn sh (submitRule name text code pn)) ok $ toResponse html nomicPageComm :: PlayerNumber - ServerHandle - Comm () - RoutedNomicServer Html nomicPageComm pn sh comm = (..) launchWebServer :: ServerHandle - IO () launchWebServer sh = do putStrLn Starting web server...\nTo connect, drive your browser to \http://localhost:8000/Login\; d - liftIO getDataDir simpleHTTP nullConf $ mconcat [dir postLogin $ postLogin, fileServe [] d, dir Login $ ok $ toResponse $ loginPage, dir NewRule $ newRule sh, dir NewGame $ newGameWeb sh, dir Nomic $ do html - implSite http://localhost:8000/Nomic/; (nomicSite sh) ok $ toResponse html ] The red line doesn't compile. I don't know how to transform a RoutedNomicServer into a NomicServer. For the future I intend to use formlets: is these some examples of programs using happstack + web-routes + formlets? Thanks, Corentin On Fri, Jan 7, 2011 at 5:10 PM, Jeremy Shaw jer...@n-heptane.com wrote: Hello, The [(String, String)] argument is for adding query parameters. encodePathInfo [foo, bar, baz] [(key,value)] foo/bar/baz?key=value Instead of showURL you would use showURLParams. hope this helps!d - jeremy On Fri, Jan 7, 2011 at 8:12 AM, Corentin Dupont corentin.dup...@gmail.com wrote: Hello Jeremy, I'm using Web routes with happstack. I'm following this tutorial: http://tutorialpedia.org/tutorials/Happstack+type+safe+URLs.html But It seems out of synch with the latest version of web-routes: 0.23.2. The haddock documentation seems out of date also: encodePathInfo :: [String] - [(String, String)] - String For example: encodePathInfo [\foo\, \bar\, \baz\] foo/bar/baz And I can't figure out what this [(String, String)] is for ;) Thanks, Corentin {-# LANGUAGE DeriveDataTypeable, FlexibleContexts, FlexibleInstances, PackageImports, MultiParamTypeClasses, TemplateHaskell #-} {-# OPTIONS_GHC -F -pgmFtrhsx #-} module Main where import Control.Applicative(Applicative((*)), (*), Alternative, ($), optional) import Control.Monad (MonadPlus(mzero), msum) import Control.Monad.Trans(MonadIO(liftIO)) import Data.ByteString.Lazy as LB (ByteString) import Data.ByteString.Lazy.UTF8 as LB (toString) import Data.Data (Data) import qualified Data.Textas T import Data.Text(Text) import qualified Data.Text.Lazy as TL import qualified Data.Text.Lazy.Encoding as TL import Data.Typeable (Typeable) import Happstack.Server ( HasRqData, Input(..), FilterMonad, Method(GET, HEAD, POST), Response , ServerMonad, ServerPart, ServerPartT, ToMessage(toResponse) , WebMonad, decodeBody, defaultBodyPolicy,
Re: [Haskell-cafe] hoogle command line program on Linux
Neil Mitchell wrote: Hoogle 4.1.3 is now released, which reads and writes Hoogle input files in UTF8 throughout. Please let me know if this doesn't fix your problem. Thanks Neil for the quick response. That definitely has fixed thet problem. The next problem is that hoogle installed as a Debian package would install as root as /usr/bin/hoogle. Then, when I run hoogle data it wants to install the database at /usr/share/hoogle/hoogle-4.1.3/databases which fails because I'm not running as root. So, to install the databases I need to run sudo hoogle data (which is acceptable), but then an unprivelidge user can't run hoogle because they don't have read permission on the database. The solution would be to set the umask before writing the databases. Something like (untested): import System.Posx -- Set umask to world read/execute. Save old umask for -- restoration later. oldumask - setFileCreationMask 0o022 If you need help with this, let me know. Cheers, Erik -- -- Erik de Castro Lopo http://www.mega-nerd.com/ ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] web-routes and forms
Hello, after installing digestive-functors-blaze with: cabal install digestive-functors-blaze My prog doesn't compiles anymore: Warning: This package indirectly depends on multiple versions of the same package. This is highly likely to cause a compile failure. Followed by an error on MonadCatchIO. I'm using the following versions: happstack-server-0.5.0.2 mtl-1.1.0.2 blaze-html-0.2.3 web-routes-0.22.0 text-0.7.2.1 But cabal tried to install newer versions for these: mtl-2.0.1.0 blaze-html-0.3.2.1 text-0.11.0.1 I already add this problem in the past, when I tried to update my MTL... With absolutely no success!! I encountered the same sort of problem of multiple versions dependencies. I was unable to solve it. After some research, I followed an advise telling that you should stick with the same version of the libraries during development, so that I did: I went back to the previous versions. Is there a safe way to update some base libraries like MTL and all depending libraries? Would I be able to use digestive-functors with my current set of libraries? Thanks, Corentin On Sun, Jan 9, 2011 at 8:36 PM, Jeremy Shaw jer...@n-heptane.com wrote: Hello, newRule also needs to have the type, RoutedNomicServer. The transformation of RoutedNomicServer into NomicServer is done in the handleSite function. Something like this: nomicSpec :: ServerHandle - Site Route (ServerPartT IO Response) nomicSpec sh = Site { handleSite = \f url - unRouteT (nomicSite sh url) f ... main = do ... simpleHTTP nullConf $ siteImpl (nomicSpec sh) Or something like that -- it's hard to tell exactly what is going on in your app based on the snippets you provided. Also, I highly recommend using digestive functors instead of formlets. It is the successor to formlets. Same core idea, better implementation and actively maintained. I have attached a quick demo of using: happstack+digestive-functors+web-routes+HSP To use it you will need the latest happstack from darcs plus: hsp web-routes web-routes-hsp web-routes-happstack web-routes-mtl digestive-functors digestive-functors-hsp I plan to clean up this example and document it better in the crash course for the upcoming release. Clearly things like the FormInput instance and the formPart function belong a library. let me know if you have more questions. - jeremy On Sat, Jan 8, 2011 at 6:44 PM, Corentin Dupont corentin.dup...@gmail.com wrote: Hello, I have difficulties mixing web-routes and forms: I have put routes in all my site, except for forms which remains with the type ServerPartT IO Response. How to make them work together? I have: type NomicServer = ServerPartT IO type RoutedNomicServer = RouteT PlayerCommand NomicServer newRule :: ServerHandle - NomicServer Response newRule sh = do methodM POST -- only accept a post method mbEntry - getData -- get the data case mbEntry of Nothing - error $ error: newRule Just (NewRule name text code pn) - do html - nomicPageComm pn sh (submitRule name text code pn)) ok $ toResponse html nomicPageComm :: PlayerNumber - ServerHandle - Comm () - RoutedNomicServer Html nomicPageComm pn sh comm = (..) launchWebServer :: ServerHandle - IO () launchWebServer sh = do putStrLn Starting web server...\nTo connect, drive your browser to \http://localhost:8000/Login\ http://localhost:8000/Login%5C d - liftIO getDataDir simpleHTTP nullConf $ mconcat [dir postLogin $ postLogin, fileServe [] d, dir Login $ ok $ toResponse $ loginPage, dir NewRule $ newRule sh, dir NewGame $ newGameWeb sh, dir Nomic $ do html - implSite http://localhost:8000/Nomic/; (nomicSite sh) ok $ toResponse html ] The red line doesn't compile. I don't know how to transform a RoutedNomicServer into a NomicServer. For the future I intend to use formlets: is these some examples of programs using happstack + web-routes + formlets? Thanks, Corentin On Fri, Jan 7, 2011 at 5:10 PM, Jeremy Shaw jer...@n-heptane.com wrote: Hello, The [(String, String)] argument is for adding query parameters. encodePathInfo [foo, bar, baz] [(key,value)] foo/bar/baz?key=value Instead of showURL you would use showURLParams. hope this helps!d - jeremy On Fri, Jan 7, 2011 at 8:12 AM, Corentin Dupont corentin.dup...@gmail.com wrote: Hello Jeremy, I'm using Web routes with happstack. I'm following this tutorial: http://tutorialpedia.org/tutorials/Happstack+type+safe+URLs.html But It seems out of synch with the latest version of
Re: [Haskell-cafe] GHC.Ptr, Foreign.Storable, Data.Storable.Endian, looking for good examples of usage
On Sun, 9 Jan 2011, Aaron Gray wrote: I am trying to work out how to use GHC.Ptr, Foreign.Storable, Data.Storable.Endian, and am looking for good examples of usage. What do you intend to do with them? The package storablevector uses a lot of Ptr, peek, and poke. Maybe this is of some help. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] GHC.Ptr, Foreign.Storable, Data.Storable.Endian, looking for good examples of usage
On Sun, 09 Jan 2011 14:48:09 +0100, Aaron Gray aaronngray.li...@gmail.com wrote: Hi, I am trying to work out how to use GHC.Ptr, Foreign.Storable, Data.Storable.Endian, and am looking for good examples of usage. Many thanks in advance, Aaron You can lookup, which packages use these, by looking at the reverse dependencies: http://bifunctor.homelinux.net/~roel/hackage/packages/archive/pkg-list.html Regards, Henk-Jan van Tuyl -- http://Van.Tuyl.eu/ http://members.chello.nl/hjgtuyl/tourdemonad.html -- ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] GHC.Ptr, Foreign.Storable, Data.Storable.Endian, looking for good examples of usage
On 9 January 2011 22:34, Henk-Jan van Tuyl hjgt...@chello.nl wrote: On Sun, 09 Jan 2011 14:48:09 +0100, Aaron Gray aaronngray.li...@gmail.com wrote: Hi, I am trying to work out how to use GHC.Ptr, Foreign.Storable, Data.Storable.Endian, and am looking for good examples of usage. Many thanks in advance, Aaron You can lookup, which packages use these, by looking at the reverse dependencies: http://bifunctor.homelinux.net/~roel/hackage/packages/archive/pkg-list.html Handy I did not notice that, nice. Thanks, Aaron Regards, Henk-Jan van Tuyl -- http://Van.Tuyl.eu/ http://members.chello.nl/hjgtuyl/tourdemonad.html -- ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] GHC.Ptr, Foreign.Storable, Data.Storable.Endian, looking for good examples of usage
On 9 January 2011 21:30, Henning Thielemann lemm...@henning-thielemann.dewrote: On Sun, 9 Jan 2011, Aaron Gray wrote: I am trying to work out how to use GHC.Ptr, Foreign.Storable, Data.Storable.Endian, and am looking for good examples of usage. What do you intend to do with them? An (ABC) ActionScript Byte Code backend for Haskell. Basically I need to write little-endian binary to a file, and was wondering the best way to do this; I need various types including a 24bit type. The package storablevector uses a lot of Ptr, peek, and poke. Maybe this is of some help. Okay thanks, Aaron ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] How to write such a code elegantly ?
betterStdGen :: IO StdGen betterStdGen = alloca $ \p - do h - openBinaryFile /dev/urandom ReadMode hGetBuf h p $ sizeOf (undefined :: Int) hClose h mkStdGen $ peek p picoSec :: IO Integer picoSec = do t - ctPicosec `liftM` (getClockTime = toCalendarTime) return t The pseudo-code is : if doesFileExist /dev/urandom then myGen = betterStdGen else myGen = (mkStdGen . fromTnteger) $ picoSec How to write these pseudo-code elegantly ? Sincerely! - e^(π.i) + 1 = 0 -- View this message in context: http://haskell.1045720.n5.nabble.com/How-to-write-such-a-code-elegantly-tp3334329p3334329.html Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] How to write such a code elegantly ?
On 10 January 2011 10:44, z_axis z_a...@163.com wrote: betterStdGen :: IO StdGen betterStdGen = alloca $ \p - do h - openBinaryFile /dev/urandom ReadMode hGetBuf h p $ sizeOf (undefined :: Int) hClose h mkStdGen $ peek p Maybe use a catch or something here and have it return IO (Maybe StdGen), with Nothing denoting that file not existing? -- Ivan Lazar Miljenovic ivan.miljeno...@gmail.com IvanMiljenovic.wordpress.com ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] GHC.Ptr, Foreign.Storable, Data.Storable.Endian, looking for good examples of usage
On Sun, Jan 9, 2011 at 6:05 PM, Aaron Gray aaronngray.li...@gmail.com wrote: On 9 January 2011 21:30, Henning Thielemann lemm...@henning-thielemann.de wrote: On Sun, 9 Jan 2011, Aaron Gray wrote: I am trying to work out how to use GHC.Ptr, Foreign.Storable, Data.Storable.Endian, and am looking for good examples of usage. What do you intend to do with them? An (ABC) ActionScript Byte Code backend for Haskell. Basically I need to write little-endian binary to a file, and was wondering the best way to do this; I need various types including a 24bit type. Ah, I would recommend the 'binary' package on hackage, specifically the module Data.Binary.Builder. Another recently popular alternative is the 'blaze-builder' package. Although the 24-bit access might be difficult - how are they aligned? I guess with either of these you'd have to peek a Word8 and then a Word16 and then munge them together, depending. Antoine http://hackage.haskell.org/package/binary http://hackage.haskell.org/package/blaze-builder The package storablevector uses a lot of Ptr, peek, and poke. Maybe this is of some help. Okay thanks, Aaron ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] GHC.Ptr, Foreign.Storable, Data.Storable.Endian, looking for good examples of usage
On 10 January 2011 01:08, Antoine Latter aslat...@gmail.com wrote: On Sun, Jan 9, 2011 at 6:05 PM, Aaron Gray aaronngray.li...@gmail.com wrote: On 9 January 2011 21:30, Henning Thielemann lemm...@henning-thielemann.de wrote: On Sun, 9 Jan 2011, Aaron Gray wrote: I am trying to work out how to use GHC.Ptr, Foreign.Storable, Data.Storable.Endian, and am looking for good examples of usage. What do you intend to do with them? An (ABC) ActionScript Byte Code backend for Haskell. Basically I need to write little-endian binary to a file, and was wondering the best way to do this; I need various types including a 24bit type. Ah, I would recommend the 'binary' package on hackage, specifically the module Data.Binary.Builder. Another recently popular alternative is the 'blaze-builder' package. It does say that it is designed to work with bigendian data, but there are some little-endian primatives in Data.Binary.Get/Put Although the 24-bit access might be difficult - how are they aligned? They are non aligned, they are actually used as jump offsets in the byte code. I guess with either of these you'd have to peek a Word8 and then a Word16 and then munge them together, depending. Three put/getWord8's would probably be neater. http://hackage.haskell.org/package/binary http://hackage.haskell.org/package/blaze-builder Blaze looks a bit more specialized. Many thanks, Aaron ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] How to write such a code elegantly ?
z_axis z_a...@163.com wrote: betterStdGen :: IO StdGen betterStdGen = alloca $ \p - do h - openBinaryFile /dev/urandom ReadMode hGetBuf h p $ sizeOf (undefined :: Int) hClose h mkStdGen $ peek p picoSec :: IO Integer picoSec = do t - ctPicosec `liftM` (getClockTime = toCalendarTime) return t The pseudo-code is : if doesFileExist /dev/urandom then myGen = betterStdGen else myGen = (mkStdGen . fromTnteger) $ picoSec How to write these pseudo-code elegantly ? I would do this: {-# LANGUAGE ScopedTypeVariables #-} readFrom :: forall a. Storable a = Handle - IO a readFrom h = alloca $ \ptr - hGetBuf h ptr (sizeOf (undefined :: a)) peek ptr newStdGen' :: IO StdGen newStdGen' = do mh - try $ openBinaryFile /dev/urandom ReadMode case mh of Left err - ctPicosec $ (getClockTime = toCalendarTime) Right h - mkStdGen $ readFrom h `finally` hClose h Warning: Untested code, but it should work and have a safer file handling. Also note that the current implementation (base = 4) does this already. You should probably try one of the more sophisticated PRNG libraries out there. Check out mersenne-random and mwc-random. If you want a pure generator, there is also mersenne-random-pure64 and some other libraries. Greets, Ertugrul -- nightmare = unsafePerformIO (getWrongWife = sex) http://ertes.de/ ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] How to write such a code elegantly ?
thanks for all of your replies. I will test your code later. Another newbie question is why has the following code indentation problem ? rollDice n = do let myGen = if doesFileExist /dev/urandom then betterStdGen else (mkStdGen . fromInteger) $ picoSec return $ (take 1 $ randomRs (1,n) myGen) !! 0 Sincerely! - e^(π.i) + 1 = 0 -- View this message in context: http://haskell.1045720.n5.nabble.com/How-to-write-such-a-code-elegantly-tp3334329p3334379.html Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] How to write such a code elegantly ?
On 10 January 2011 12:25, z_axis z_a...@163.com wrote: thanks for all of your replies. I will test your code later. Another newbie question is why has the following code indentation problem ? rollDice n = do let myGen = if doesFileExist /dev/urandom then betterStdGen else (mkStdGen . fromInteger) $ picoSec return $ (take 1 $ randomRs (1,n) myGen) !! 0 I don't see an indentation problem, but I _do_ see a type problem: doesFileExist presumably uses IO, and as such can't be used as a Bool for the if statement. -- Ivan Lazar Miljenovic ivan.miljeno...@gmail.com IvanMiljenovic.wordpress.com ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] GHC.Ptr, Foreign.Storable, Data.Storable.Endian, looking for good examples of usage
On Sun, Jan 9, 2011 at 8:11 PM, Aaron Gray aaronngray.li...@gmail.com wrote: On 10 January 2011 01:08, Antoine Latter aslat...@gmail.com wrote: Although the 24-bit access might be difficult - how are they aligned? They are non aligned, they are actually used as jump offsets in the byte code. Hah hah, yes. That would make a lot more sense. I guess with either of these you'd have to peek a Word8 and then a Word16 and then munge them together, depending. Three put/getWord8's would probably be neater. http://hackage.haskell.org/package/binary http://hackage.haskell.org/package/blaze-builder Blaze looks a bit more specialized. It has a larger surface area and more types, so it can be intimidating, but it has the module 'Blaze.ByteString.Builder.Word' which is an idealogical equivalent to the word primitives in Data.Binary.Builder. Antoine Many thanks, Aaron ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] How to write such a code elegantly ?
rollDice n = do tmp - doesFileExist /dev/urandom myGen - if tmp then betterStdGen else (mkStdGen . fromInteger) $ picoSec return $ (take 1 $ randomRs (1,n) myGen) !! 0 works but not so elegant? - e^(π.i) + 1 = 0 -- View this message in context: http://haskell.1045720.n5.nabble.com/How-to-write-such-a-code-elegantly-tp3334329p3334395.html Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Draw K-ary forest in dot script
Hi, I wrote a Haskell program to parse K-ary forest and convert it to dot script (Graphviz). Here is the literate program. -- First is some stuff imported: module Main where import System.Environment (getArgs) import Text.ParserCombinators.Parsec import Control.Monad (mapM_) import Data.List (concatMap, intercalate) import System.IO (writeFile) import Data.Char (isSpace) -- For each tree in the forest, it is described in pre-order. -- Example description string of a forest of CLRS[1] Figure 19.5(a): -- (12), (7, (25)), (15, (28, (41)), (33)) -- Definition of K-ary node data Node a = Node { root :: a , children :: [Node a]} deriving (Eq, Show) -- Definition of Forest type Forest a = [Node a] -- parsers -- a forest is a list of trees separate by ',' forest = do ts - node `sepBy` (char ',') return ts -- a node contains a key then followed by a children forest or nothing (leaf case) node = do char '(' elem - key ts - (try (char ',')forest) | return [] char ')' return (Node elem ts) -- a key is just a plain literate string. key = many (noneOf ,()) -- Command line arguments handling parseArgs :: [String] - (String, String) parseArgs [fname, s] = (fname, s) parseArgs _ = error wrong usage\nexample:\nfr2dot output.dot \(12), (7, (25)), (15, ((28, (41)), 33))\ -- A simplified function to generate dot script from parsed result. toDot f = forestToDot f t True -- a handy function to convert children of a K-ary tree to dot script treesToDot ts prefix = forestToDot ts prefix False -- convert a forest to dot script forestToDot [] _ _ = forestToDot [t] prefix _ = nodeToDot t prefix forestToDot ts@(_:_:_) prefix lnk = (concatMap (\t-nodeToDot t prefix) ts) ++ consRoot where consRoot = {rank=same ++ ns ++ vis ++ }\n ns = intercalate - $ map (\t - prefix ++ root t) ts vis = if lnk then else [style=invis] -- convert a node to dot script nodeToDot (Node x ts) prefix = prefix'++[label=\++x++\];\n ++ (treesToDot ts prefix') ++ (defCons ts prefix') where prefix' = prefix ++ x -- define connections among nodes in dot format defCons ts prefix = concatMap f ts where f (Node x _) = prefix++-++prefix++x++;\n -- generate dot script from a parsed forest genDot fname (Right f) = writeFile fname dots putStrLn dots where dots = digraph G{\n\tnode[shape=circle]\n++(addTab $ toDot f)++} addTab s = unlines $ map (\t++) (lines s) main = do args - getArgs let (fname, s) = parseArgs args genDot fname (parse forest unknown (filter (not.isSpace) s)) -- END I tested with the following simple cases: ./fr2dot foo.dot (12), (7, (25)), (15, (28, (41)), (33)) ./fr2dot bar.dot (18), (3, (37)), (6, (8, (30, (45, (55)), (32)), (23, (24)), (22)), (29, (48, (50)), (31)), (10, (17)), (44)) Run the following commands can convert to PNG files: ./dot -Tpng -o foo.png foo.dot ./dot -Tpng -o bar.png bar.dot Reference: [1]. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein. ``Introduction to Algorithms, Second Edition''. The MIT Press, 2001. ISBN: 0262032937. Best regards. -- Larry, LIU https://sites.google.com/site/algoxy/home ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] hoogle command line program on Linux
Hi Erik, The next problem is that hoogle installed as a Debian package would install as root as /usr/bin/hoogle. Then, when I run hoogle data it wants to install the database at /usr/share/hoogle/hoogle-4.1.3/databases which fails because I'm not running as root. So, to install the databases I need to run sudo hoogle data (which is acceptable), but then an unprivelidge user can't run hoogle because they don't have read permission on the database. The solution would be to set the umask before writing the databases. Something like (untested): import System.Posx -- Set umask to world read/execute. Save old umask for -- restoration later. oldumask - setFileCreationMask 0o022 Should all files created by hoogle data always have world read/execute? I'm not sure what the Unix conventions are - would that be reasonable? If so, I'll make a new release that just changes the file creation mask to the above during hoogle data (and sets it back after). Thanks, Neil ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe