Re: [Haskell-cafe] Generics (SYB) with parametrized types
Hi, I'm not sure I fully understand what you're trying to do, but when I read Ideally, I'd like to restrict my search to Located instances that wrap an instance of Outputable, I think this means SYB is not the right tool. Due to the way Typeable works (it's monomorphic), SYB doesn't really play well with adhoc cases for types which satisfy given class constraints. Your adhoc cases have to be listed per type, a bit like in the empty function [1], for instance. Also, SYB and parametrized types don't really mix all that well either. This affects things like extracting all the `b`s from a `Located b`. Perhaps you could have a look at the new generics in GHC 7.2 [2]? You should be able to derive `Generic` for all the GHC API types (using standalone deriving), and this mechanism deals fine with (single) parametrized types. I'd be happy to hear what happens if you try this. Cheers, Pedro [1] http://hackage.haskell.org/packages/archive/syb/latest/doc/html/src/Data-Generics-Builders.html#empty [2] http://www.haskell.org/haskellwiki/Generics On Thu, Aug 11, 2011 at 17:56, JP Moresmau jpmores...@gmail.com wrote: Hello, I'm banging my head against a wall there trying to use the syb generics schemes against the GHC API. I'm looking at implementing a search mechanism in the AST in the more direct way that what Scion does (creating an instance of a TypeClass for each AST node type). Since the GHC AST types derive from Data and Typeable, I thought it would be possible. So the problem is a follows: I have a start type, say TypecheckedSource, that derives from Data. What I'd like to do is to find all instances of the Located type inside that source that span a particular range. The problem is that Located is a parametrized type that wraps anything and just add location information. So the result of the search could be anything. Ideally, I'd like to restrict my search to Located instances that wrap an instance of Outputable, pretty print that and output only the result. So I'm looking to implement something that would have that signature: TypecheckedSource - (Line,Column) - [String] I have written code along these lines: everything (++) ([] `mkQ` overlap) ts where overlap :: forall b1 . (Outputable b1, Typeable b1) =Located b1 - [String] overlap (a::Located b1)= ... trivial code here finding if the location overlaps, and if it does, pretty print the object, otherwise returns [] And GHC complains: Ambiguous type variable `b10' in the constraints: (Outputable b10) arising from a use of `overlap' at ... (Typeable b10) arising from a use of `overlap' at ... So it doesn't like the fact that I don't know which types my Located instances wrap. But that's the point, I don't care, I just want to restrict my search to the ones I can pretty print. If I just try the code against simple non parametrized types it of course works. If I add some forall b1 . (Outputable ... in my main function signature it complains that I never use b1 anywhere else in the signature, of course. Is there a way to achieve what I want (-XOhPleaseDoWhatIwantEvenIfIamNotSureItMakesSense or something)? Thanks a million! -- JP Moresmau http://jpmoresmau.blogspot.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] Hiding growing state using existentials.
You can't define (=) if your state type changes: (=) :: m a - (a - m b) - m c Whereas, your bind is effectively three different parametric types: _bind :: m1 a - (a - m2 b) - m3 b You can use parametric monads to represent state changing within a monad. Oleg Kiselyov has tutorials on their use on his website (search for the Monadish class). The SHE experimental extension of Haskell also has parametric monads built in. bindish :: m s1 a - (a - m s2 b) - m s2 b I don't think parametric monads will solve your problem though, as you want a product of the states as the result of bind. Are you really sure you want this behavior?, I'd imagine it breaks the monad laws anyway. http://okmij.org/ftp/Computation/monads.html ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Hiding growing state using existentials.
On 08/16/2011 09:23 AM, Stephen Tetley wrote: {- I don't think parametric monads will solve your problem though, as you want a product of the states as the result of bind. Are you really sure you want this behavior?, I'd imagine it breaks the monad laws anyway. -} It seems that the product is essential to what I want to do. The product comes from the property that the states are independent. Each Sig has a state component that is only known to the function (s - (a, s)) that represents a sequence as an iterated function. This iteration is to be seeded with an initial value stored in Sig when unfolding the Sig (see _run). Because this parallel state is completely in the background it thought it might be possible to hide it. What I don't understand is why the usage of the existential type breaks at my definition of the Monad instance, but not at the Applicative instance. I.e. My _ap is :: Sig s1 (x - y) - Sig s2 x - Sig s3 y but this doesn't hinder the construction of an Applicative instance using the existential type which hides the s parameter (see below). The problem seems to be to convince the type checker that it's ok to unpack the data in the case of the Monad instance. Or maybe it really isn't ok, but then I don't understand why. {-# LANGUAGE ExistentialQuantification #-} import Control.Applicative data Sig s a = Sig { sigInit :: s, sigNext :: (s - (a, s)) } _join :: (Sig s1 (Sig s2 a)) - Sig (s1,s2) a _join (Sig i1 u1) = Sig (i1, i2) u12 where ((Sig i2 _), _) = u1 i1 u12 (s1, s2) = (a, (s1', s2')) where ((Sig _ u2), s1') = u1 s1 (a, s2') = u2 s2 _fmap :: (a - b) - Sig s a - Sig s b _fmap f (Sig s0 u) = Sig s0 u' where u' s = (f a, s') where (a, s') = u s _return x = Sig () $ \() - (x, ()) _bind :: (Sig s1 a) - (a - Sig s2 b) - (Sig (s1,s2) b) m `_bind` g = _join ((_fmap g) m) _ap :: Sig s1 (a - b) - Sig s2 a - Sig (s1, (s2, ())) b _ap f a = f `_bind` \f' - a `_bind` \a' - _return $ f' a' _run :: Sig s a - [a] _run (Sig init next) = f init where f s = (v:vs) where (v, s') = next s vs = f s' data Signal a = forall s. Signal (Sig s a) run (Signal a) = _run a These work! instance Functor Signal where fmap f (Signal a) = Signal $ _fmap f a instance Applicative Signal where pure = Signal . _return (*) (Signal f) (Signal a) = Signal $ _ap f a ramp = Signal $ Sig 0 $ \s - (s, s+1) disp = (take 10) . run test1 = disp $ pure 1 -- [1,1,1,1,1,1,1,1,1,1] test2 = disp $ ramp -- [0,1,2,3,4,5,6,7,8,9] test3 = disp $ pure (1 +) * ramp -- [1,2,3,4,5,6,7,8,9,10] So why not this one? How to unpack the return value of f? {- instance Monad Signal where return = Signal . _return (=) (Signal ma) f = Signal $ _bind ma f' where f' a = case (f a) of Signal mb - mb -} ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Getting segmentation fault when profiling, despite `-K100M'.
Hi all, I'm trying to profile a mixed language program, in which Haskell is NOT the top layer and does not contain the `main' function. (C is/does.) Is this effort doomed to fail? I'm getting a segmentation fault, as soon as the first Haskell function is called, despite having included `-K100M' in my list of +RTS args: 19 int argc = 5; 20 char* argv[] = {ghcDll, 21 +RTS, 22 -hc, 23 -p, 24 -K100M, 25 NULL}; // argv must end with NULL 26 27 // Initialize Haskell runtime 28 char** args = argv; 29 hs_init(argc, args); Using gdb to trace through the C-code, up until the first call to Haskell, I get to here: 64 // Call the Haskell function. 65 res = amiInit( 66 impulse_matrix, 67 row_size, Here's the beginning of `amiInit': 41 -- Our Haskell implementation of `AMI_Init'. 42 amiInit :: Ptr CDouble - CInt - CInt - CDouble - CDouble - 43CString - Ptr CString - Ptr (StablePtr AmiModel) - Ptr CString - IO Int 44 amiInit impulse_matrix row_size aggressors sample_interval bit_time 45 ami_parameters_in ami_parameters_out ami_memory_handle msgHndl 46 | impulse_matrix == nullPtr = return 0 47 | otherwise = do 48 putStrLn I'm here. I never see I'm here. printed to my console, before I get the segmentation fault. Any thoughts? Thanks, -db ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Getting segmentation fault when profiling, despite `-K100M'.
On 16 August 2011 15:56, David Banas dba...@banasfamily.net wrote: Any thoughts? Just a hunch, did you specify the correct calling convention for amiInit? ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Memory management issue in notmuch-haskell bindings
It seems that the notmuch-haskell bindings (version 0.2.2 built against notmuch from git master; passes notmuch-test) aren't dealing with memory management properly. In particular, the attached test code[1] causes talloc to abort. Unfortunately, while the issue is consistently reproducible, it only occurs with some queries (see source[1]). I have been unable to establish the exact criterion for failure. It seems that the crash is caused by an invalid access to a freed Query object while freeing a Messages object (see Valgrind trace[3]). I've taken a brief look at the bindings themselves but, being only minimally familiar with the FFI, there's nothing obviously wrong (the finalizers passed to newForeignPtr look sane). I was under the impression that talloc was reference counted, so the Query object shouldn't have been freed unless if there was still a Messages object holding a reference. Any idea what might have gone wrong here? Thanks! Cheers, - Ben [1] Test case, import Data.List import Control.Monad import System.Environment import Foreign.Notmuch dbpath = /home/ben/.mail getAddresses :: Database - String - IO [String] getAddresses db q = do query - queryCreate db q msgs - queryMessages query addrs - mapM (flip messageGetHeader $ From) msgs return addrs main = do db - databaseOpen dbpath DatabaseModeReadOnly --addrs2 - getAddresses db tag:haskell -- This succeeds addrs3 - getAddresses db to:dietz -- This fails --print addrs2 --print addrs3 databaseClose db [2] Crashed session and backtrace, [1217 ben@ben-laptop ~] $ ghc test.hs -auto-all -rtsopts -prof gdb ./test GNU gdb (Ubuntu/Linaro 7.2-1ubuntu11) 7.2 Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type show copying and show warranty for details. This GDB was configured as x86_64-linux-gnu. For bug reporting instructions, please see: http://www.gnu.org/software/gdb/bugs/... Reading symbols from /home/ben/test...(no debugging symbols found)...done. (gdb) run Starting program: /home/ben/test [Thread debugging using libthread_db enabled] Program received signal SIGABRT, Aborted. 0x75979d05 in raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64 64 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory. in ../nptl/sysdeps/unix/sysv/linux/raise.c (gdb) bt #0 0x75979d05 in raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64 #1 0x7597dab6 in abort () at abort.c:92 #2 0x76de038c in talloc_abort (reason=0x76de56e8 Bad talloc magic value - access after free) at ../talloc.c:210 #3 0x76de0271 in talloc_abort_access_after_free (ptr=0x769190, location=0x77bd4e04 lib/messages.c:142) at ../talloc.c:229 #4 talloc_chunk_from_ptr (ptr=0x769190, location=0x77bd4e04 lib/messages.c:142) at ../talloc.c:250 #5 _talloc_free (ptr=0x769190, location=0x77bd4e04 lib/messages.c:142) at ../talloc.c:1164 #6 0x77bc7e65 in notmuch_messages_destroy (messages=0x769190) at lib/messages.c:142 #7 0x004de1c9 in scheduleFinalizers () #8 0x004e013d in GarbageCollect () #9 0x004d9e40 in scheduleDoGC.clone.18 () #10 0x004db0e0 in exitScheduler () #11 0x004d9066 in hs_exit_ () #12 0x004d940a in shutdownHaskellAndExit () #13 0x004d8a91 in real_main () #14 0x004d8ade in hs_main () #15 0x75964eff in __libc_start_main (main=0x408ed0 main, argc=1, ubp_av=0x7fffe4f8, init=value optimized out, fini=value optimized out, rtld_fini=value optimized out, stack_end=0x7fffe4e8) at libc-start.c:226 #16 0x00407791 in _start () (gdb) [3] Valgrind output, ==25241== Memcheck, a memory error detector ==25241== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al. ==25241== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info ==25241== Command: ./test ==25241== ==25241== Conditional jump or move depends on uninitialised value(s) ==25241==at 0x52BB510: inflateReset2 (in /lib/x86_64-linux-gnu/libz.so.1.2.3.4) ==25241==by 0x52BB605: inflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.3.4) ==25241==by 0x5F211BE: ChertTable::lazy_alloc_inflate_zstream() const (chert_table.cc:1672) ==25241==by 0x5F23B06: ChertTable::read_tag(Cursor*, std::string*, bool) const (chert_table.cc:1264) ==25241==by 0x5F260F9: ChertTable::get_exact_entry(std::string const, std::string) const (chert_table.cc:1210) ==25241==by 0x5F26DE2: ChertTermList::ChertTermList(Xapian::Internal::RefCntPtrChertDatabase const, unsigned int) (chert_termlist.cc:44) ==25241==by 0x5EFF2E5: ChertDatabase::open_term_list(unsigned int) const (chert_database.cc:891) ==25241==by 0x5E7E7FB:
Re: [Haskell-cafe] Getting segmentation fault when profiling, despite `-K100M'.
If you want to call a Haskell function from C you should do a foreign export of the function, that will create a stub function with C calling convention that you can call. Regards, Niklas 2011/8/16 David Banas dba...@banasfamily.net: Hi all, I'm trying to profile a mixed language program, in which Haskell is NOT the top layer and does not contain the `main' function. (C is/does.) Is this effort doomed to fail? I'm getting a segmentation fault, as soon as the first Haskell function is called, despite having included `-K100M' in my list of +RTS args: 19 int argc = 5; 20 char* argv[] = {ghcDll, 21 +RTS, 22 -hc, 23 -p, 24 -K100M, 25 NULL}; // argv must end with NULL 26 27 // Initialize Haskell runtime 28 char** args = argv; 29 hs_init(argc, args); Using gdb to trace through the C-code, up until the first call to Haskell, I get to here: 64 // Call the Haskell function. 65 res = amiInit( 66 impulse_matrix, 67 row_size, Here's the beginning of `amiInit': 41 -- Our Haskell implementation of `AMI_Init'. 42 amiInit :: Ptr CDouble - CInt - CInt - CDouble - CDouble - 43 CString - Ptr CString - Ptr (StablePtr AmiModel) - Ptr CString - IO Int 44 amiInit impulse_matrix row_size aggressors sample_interval bit_time 45 ami_parameters_in ami_parameters_out ami_memory_handle msgHndl 46 | impulse_matrix == nullPtr = return 0 47 | otherwise = do 48 putStrLn I'm here. I never see I'm here. printed to my console, before I get the segmentation fault. Any thoughts? Thanks, -db ___ 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] Getting segmentation fault when profiling, despite `-K100M'.
Reading a bit closer I assume you have already done that. Sorry for that. Regards, Niklas 2011/8/16 Niklas Larsson metanik...@gmail.com: If you want to call a Haskell function from C you should do a foreign export of the function, that will create a stub function with C calling convention that you can call. Regards, Niklas 2011/8/16 David Banas dba...@banasfamily.net: Hi all, I'm trying to profile a mixed language program, in which Haskell is NOT the top layer and does not contain the `main' function. (C is/does.) Is this effort doomed to fail? I'm getting a segmentation fault, as soon as the first Haskell function is called, despite having included `-K100M' in my list of +RTS args: 19 int argc = 5; 20 char* argv[] = {ghcDll, 21 +RTS, 22 -hc, 23 -p, 24 -K100M, 25 NULL}; // argv must end with NULL 26 27 // Initialize Haskell runtime 28 char** args = argv; 29 hs_init(argc, args); Using gdb to trace through the C-code, up until the first call to Haskell, I get to here: 64 // Call the Haskell function. 65 res = amiInit( 66 impulse_matrix, 67 row_size, Here's the beginning of `amiInit': 41 -- Our Haskell implementation of `AMI_Init'. 42 amiInit :: Ptr CDouble - CInt - CInt - CDouble - CDouble - 43 CString - Ptr CString - Ptr (StablePtr AmiModel) - Ptr CString - IO Int 44 amiInit impulse_matrix row_size aggressors sample_interval bit_time 45 ami_parameters_in ami_parameters_out ami_memory_handle msgHndl 46 | impulse_matrix == nullPtr = return 0 47 | otherwise = do 48 putStrLn I'm here. I never see I'm here. printed to my console, before I get the segmentation fault. Any thoughts? Thanks, -db ___ 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] Getting segmentation fault when profiling, despite `-K100M'.
On Tue, Aug 16, 2011 at 12:42 PM, Niklas Larsson metanik...@gmail.com wrote: If you want to call a Haskell function from C you should do a foreign export of the function, that will create a stub function with C calling convention that you can call. I put an example of how to do this on Rosetta Code: http://rosettacode.org/wiki/Use_another_language_to_call_a_function#Haskell -- Chris Wilson christopher.j.wil...@gmail.com ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] why is Random in System?
I've noticed there's a convention to put modules having to deal with randomness into System.Random. I thought System was for OS interaction? Granted getting a random seed usually means going to the OS, but isn't the rest of it, like generating random sequences, distributions, selecting based on probability, shuffling, etc. all non-OS related algorithms? I'm not sure where I would expect Random to go, perhaps Math or maybe the toplevel, but under System seems, well, random... I notice random-fu puts it under Data, which is also not where I'd look, except that you always look in Data because everything goes into Data... but algorithms dealing with random numbers aren't really data structures either, are they? ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] why is Random in System?
I think of it as natural for exactly the reason you stated (the data comes from the OS). It seems even more natural to me in the entropy package module 'System.Entropy' as I am accustom to the phrase system entropy. Equally, I would fine a 'Network.Entropy' module acceptable under the assumption it connects to one of the public random number servers for it's data. Perhaps a top level Random. should be used, but that too can be questioned. For example, when I import the module Random or perhaps Random.Generators would I get fast prngs? Cryptographic prngs? Both? Something else (both slow and weak, like what we have now ;-) )? Cheers, Thomas On Tue, Aug 16, 2011 at 1:04 PM, Evan Laforge qdun...@gmail.com wrote: I've noticed there's a convention to put modules having to deal with randomness into System.Random. I thought System was for OS interaction? Granted getting a random seed usually means going to the OS, but isn't the rest of it, like generating random sequences, distributions, selecting based on probability, shuffling, etc. all non-OS related algorithms? I'm not sure where I would expect Random to go, perhaps Math or maybe the toplevel, but under System seems, well, random... I notice random-fu puts it under Data, which is also not where I'd look, except that you always look in Data because everything goes into Data... but algorithms dealing with random numbers aren't really data structures either, are they? ___ 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] why is Random in System?
On Aug 16, 2011, at 4:04 PM, Evan Laforge wrote: I've noticed there's a convention to put modules having to deal with randomness into System.Random. I thought System was for OS interaction? Granted getting a random seed usually means going to the OS, but isn't the rest of it, like generating random sequences, distributions, selecting based on probability, shuffling, etc. all non-OS related algorithms? I'm not sure where I would expect Random to go, perhaps Math or maybe the toplevel, but under System seems, well, random... I notice random-fu puts it under Data, which is also not where I'd look, except that you always look in Data because everything goes into Data... but algorithms dealing with random numbers aren't really data structures either, are they? System definitely does seem like an odd choice. In most cases the only interaction any PRNG, even when accessed via the FFI, has with the system is - as you say - to get an initial seed value for a global instance. When I wrote random-fu I chose to use Data.Random based on the perspective is that a random variable or process _is_ just a mathematical object, and can be represented by an abstract data structure. I'm sure there's a case to be made against that view too, and if someone were to present a good argument for something better I'd even consider changing it. It seems to me, though, that the line between data and not-data is pretty fuzzy in a functional language (which is one of the many things that makes them great), and for me it seems quite natural to think of random variables as data. At least, in practice it feels a lot more like manipulating data than anything else. But then I'm one of those weirdos who thinks of IO t as just a data structure too. -- James ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] why is Random in System?
On Tue, Aug 16, 2011 at 17:07, James Cook mo...@deepbondi.net wrote: On Aug 16, 2011, at 4:04 PM, Evan Laforge wrote: I've noticed there's a convention to put modules having to deal with randomness into System.Random. I thought System was for OS interaction? Granted getting a random seed usually means going to the OS, but isn't the rest of it, like generating random sequences, distributions, selecting based on probability, shuffling, etc. all non-OS related algorithms? System definitely does seem like an odd choice. In most cases the only interaction any PRNG, even when accessed via the FFI, has with the system is - as you say - to get an initial seed value for a global instance. I'd be tempted to guess that the whole reason it's under System is the IO component. -- brandon s allbery allber...@gmail.com wandering unix systems administrator (available) (412) 475-9364 vm/sms ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] why is Random in System?
Yeah, fair enough about getting the seed. I think I like the idea of breaking them into System.Entropy and then Random or Data.Random. It feels odd to stick pure algorithm packages, which simply accept a random seed or stream from elsewhere, under System.Random. There are a fair number of alternate implementations on hackage which suggests people aren't satisfied with the stdlib one but haven't quite settled down on a standard alternative. James Cook, good point about Data. I suppose that's also why it seems to be the catch all for everything in haskell. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] why is Random in System?
I don't like the idea of Data.Random because random numbers use ordinary number types, and the generator itself is not the object of interest, the numbers are. I'd much prefer Math.Random. As the Math prefix isn't used in the core libraries maybe Control.Random is the least unpalatable alternative. Regards, Niklas ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] ANNOUNCE: TKYProf
Hi, forks I'm glad to announce the alpha release of TKYProf. http://hackage.haskell.org/package/tkyprof https://github.com/maoe/tkyprof TKYprof is a web-based interacitve visualizer for GHC time and allocation profiling reports. It helps you to find the bottlenecks in your code quickly! Here is a blog post: http://blog.foldr.in/tkyprof-a-web-based-interactive-visualizer-fo It is still alpha and it have some bugs. I'm happy to hear your feedback. Thanks, -- Mitsutoshi Aoe m...@foldr.in ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] ANNOUNCE: TKYProf
I'm glad to announce the alpha release of TKYProf. This looks useful, thanks! I'll try it out and let you know if I have problems. Installing with GHC 7.2, I needed to relax some upper bounds in cabal files of dependencies (maintainers CC'ed). - email-validate and ranges specify base 4.4 but also seem to work with base 5. - yesod-json specifies blaze-textual 0.2 but also seems to work with blaze-textual 0.3 Additionally, I linked /usr/lib/libstdc++.so.6 to /usr/lib/libstdc++.so before I could successfully install tkyprof. Not sure about the consequences.. Cheers, Sebastian http://hackage.haskell.org/package/tkyprof https://github.com/maoe/tkyprof TKYprof is a web-based interacitve visualizer for GHC time and allocation profiling reports. It helps you to find the bottlenecks in your code quickly! Here is a blog post: http://blog.foldr.in/tkyprof-a-web-based-interactive-visualizer-fo It is still alpha and it have some bugs. I'm happy to hear your feedback. Thanks, -- Mitsutoshi Aoe m...@foldr.in ___ 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] ANNOUNCE: TKYProf
The blaze-textual issue is intentional: There's a bug in GHC that prevents C++ code from working correctly with Template Haskell, and newer versions of blaze-textual use a C++ library for parsing doubles. I'm hoping that the defaults change on blaze-textual to use the native code instead so that I can relax this dependency. On Wed, Aug 17, 2011 at 7:31 AM, Sebastian Fischer fisc...@nii.ac.jp wrote: I'm glad to announce the alpha release of TKYProf. This looks useful, thanks! I'll try it out and let you know if I have problems. Installing with GHC 7.2, I needed to relax some upper bounds in cabal files of dependencies (maintainers CC'ed). - email-validate and ranges specify base 4.4 but also seem to work with base 5. - yesod-json specifies blaze-textual 0.2 but also seems to work with blaze-textual 0.3 Additionally, I linked /usr/lib/libstdc++.so.6 to /usr/lib/libstdc++.so before I could successfully install tkyprof. Not sure about the consequences.. Cheers, Sebastian http://hackage.haskell.org/package/tkyprof https://github.com/maoe/tkyprof TKYprof is a web-based interacitve visualizer for GHC time and allocation profiling reports. It helps you to find the bottlenecks in your code quickly! Here is a blog post: http://blog.foldr.in/tkyprof-a-web-based-interactive-visualizer-fo It is still alpha and it have some bugs. I'm happy to hear your feedback. Thanks, -- Mitsutoshi Aoe m...@foldr.in ___ 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