News aggregator

Emacs haskell-mode : how to send PART of file to repl ?

Haskell on Reddit - Sat, 07/05/2014 - 3:19am

In many emacs language modes, there are commands for interacting with a repl/interpreter for that language.

Often there are commands for sending just specific parts of the file (like single expressions or subexpressions or regoins) to the repl.

For example (among, no doubt, numerous others)

  • In ocaml, with tuareg C-c C-e (tuareg-eval-phrase)

  • In clojure, with cider (M-x cider-jack-in) C-c C-e (cider-eval-last-sexp)

  • In ruby, with ruby-mode C-x C-e (ruby-send-last-sexp)

I'm trying to do this in haskell-mode. I can type stuff in the repl within emacs and it seems to work. And while editing a buffer containing a .hs file, I can load the WHOLE file into the repl with:

C-c C-l (haskell-process-load-file)

BUT I'm not sure how to send to the repl:

1) only a portion of the file

2) "naked expressions" I tried a file with just a single expression and it gave an error. This is no big deal if you have to evaluate the whole file anyway. But if a "portion" were possible (point 1) then being able to send an expression or subexpression to the repl is sometimes useful.

I'm just having a little look at haskell, and am just trying to get a nice interactive setup.

Any suggestions on how to send portions of a haskell file to the repl would be much appreciated.

I'm hoping there's just some configuration technique that I'm not aware of.

I guess it might be possible to write an emacs mode or modify haskell-mode to do this. But as just a basic emacs user, that's probably not a good option. And also, if it is not possible in the existing haskell-mode (written by someone who knows a lot more haskell and emacs than I do) then maybe there's some technical difficulty with doing it. (Considering it's a fairly obvious thing to do and is done for many other languages)

Note: Previously asked on r/haskellquestions.
But no response. So asking again here where the traffic is greater by an order of magnitude or two.
(And people seem to be asking quite a few questions anyway.)

submitted by tersoffe
[link] [4 comments]
Categories: Incoming News

How do you work around the lack of "cabal upgrade"?

Haskell on Reddit - Sat, 07/05/2014 - 2:47am

How do you keep your globally installed Haskell tools (e.g. pandoc, hlint, etc.) up to date?

The whole situation currently seems pretty messy to me. With cabal sandboxes, the user package database seems really redundant to me. All I still install to it are Haskell tools like pandoc, where I am not interested in the modules and packages, but only in the frontend programs, and I'd like to keep these up to date, like any other program I use.

Currently, I'm keeping a list of programs I use, and do cabal install --upgrade-dependencies foo for each of them occasionally, which is pretty tedious, and occasionally fails due to version conflicts.

Ideally, I'd build each program in a separate sandbox, and only install the statically linked binaries and data files (as in cabal copy). Is there any tool for this?

submitted by lunaryorn
[link] [24 comments]
Categories: Incoming News

CFP: PRDC2014 Call for Fast Abstracts / Industry Track Papers / Posters

General haskell list - Sat, 07/05/2014 - 2:44am
PRDC2014 Call for Fast Abstracts / Industry Track Papers / Posters Singapore Nov.18-21,2014 --------------------------------- Call for Fast Abstracts --------------------------------- Fast Abstracts at PRDC are short oral presentations, either on new ideas or work in progress, or opinion pieces that can address any issue relevant to dependable systems and networks. Because they are brief and have a later deadline, Fast Abstracts enable their authors to: .Summarise work that is not yet complete .Put forward novel or challenging ideas .State positions on controversial issues .Suggest new approaches to the solution of open problems Thus, they provide an excellent opportunity to introduce new work, or present radical opinions, and receive early feedback from the community. Contributions are particularly solicited from industrial practitioners and academics that may not have been able to prepare full papers du
Categories: Incoming News

async simplify code

haskell-cafe - Sat, 07/05/2014 - 1:58am
Hi Cafe, Is there any way to simplify this async code to somehow merge the withAsync code into the STM code? Looking at the code for tstABorCD it is not easy to see that it is really just (A&&B)||(C&&D). Here is the code: Thanks for any pointers, Grant _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe< at >
Categories: Offsite Discussion

How to state semantics in denotational design?

haskell-cafe - Sat, 07/05/2014 - 12:49am
Dear all, This may seem a strange question due to my unfamiliarity with formal semantics, but bear with me. I am trying to apply denotational design principles to my library music-score, and often find myself writing down semantics of data structures in pseudo-Haskell such as The actual implementation of the data structures may or may not be identical to the semantics. For example, it makes sense to implement Span as (Time^2) or (Time x Duration), as these types are isomorphic. My question is basically: 1) Is my approach (using pseudo-Haskell) a sound way to state denotational semantics? 2) How can I state semantics (in code and/or documentation), and be sure that my implementation follow the semantics? I understand that the correctness of the implementation w.r.t. to the semantics can be verified using manual proofs, which worries me as I want to be able to refactor the semantics and be make sure that the implementation is still correct without having to repeat all the proofs. Is there a "trick" to e
Categories: Offsite Discussion

GHC and Haskell-Platform on OpenBSD

glasgow-user - Fri, 07/04/2014 - 10:50pm
Hi, I'd like to know wether anyone here is using GHC on OpenBSD *and* relying on the Haskell-Platform meta package for OpenBSD. If there's no need for the HP meta package, I could just start to update GHC and all related packages for OpenBSD, but if there are a lot of people who prefer to stick to the HP, I'd to wait until the official update of the HP. So, if you love running pkg_add haskell-platform on OpenBSD, please speak up. And if you don't care an just run pkg_add ghc please speak up too ;-) Ciao, Kili
Categories: Offsite Discussion

Representing a 3D scene

Haskell on Reddit - Fri, 07/04/2014 - 7:28pm
Categories: Incoming News

Heterogeneous Set: is unsafeCoerce safe here?

Haskell on Reddit - Fri, 07/04/2014 - 6:22pm

I've implemented a heterogeneous set, and it seems to be working (tested on one example :P), but I'm not sure if I'm doing everything right.

First of all, to allow for comparison between two different types, I've written class Ord1':

infixr 4 ==%, /=%, <%, >%, <=%, >=% class Eq1' t where (==%) :: t a -> t b -> Bool class Eq1' t => Ord1' t where compare1' :: t a -> t b -> Ordering -- (/=%), (<%), (>%), (<=%) and (>=%) -- are implemented in the obvious way

Ord1' is a higher-kinded Ord, which (unlike Ord1 from prelude-extras) allows for comparison between t a and t b, where a and b don't need to be equal. So, t is a container which implements comparison without looking inside of a or b.

The heterogeneous set's type is implemented as an unbalanced binary tree as follows:

data HSet v -- leaf node = HSetEmpty -- internal node, storing a value of type 'v a' -- (uses ExistentialQuantification) | forall a. HSetNode (v a) (HSet v) (HSet v)

Functions operating on HSet require v to be an instance of Ord1'.

Insertion is straightforward:

insert :: Ord1' v => HSet v -> v a -> HSet v insert HSetEmpty e = HSetNode e HSetEmpty HSetEmpty insert (HSetNode se l r) e | e <% se = HSetNode se (insert l e) r | otherwise = HSetNode se l (insert r e)

So is (in-order) traversal (Rank2Types in action):

hmap :: Ord1' v => HSet v -> (forall a. v a -> b) -> [b] hmap HSetEmpty _ = [] -- inefficient, but that's fine hmap (HSetNode se l r) f = hmap l f ++ f se : hmap r f

Deletion, however, is more tricky:

-- deletes one instance, if at least one is present delete :: Ord1' v => HSet v -> v a -> HSet v delete HSetEmpty _ = HSetEmpty delete (HSetNode se l r) e | e <% se = HSetNode se (delete l e) r | e >% se = HSetNode se l (delete r e) | otherwise = case l of HSetEmpty -> r _ -> HSetNode popped remains r where (popped, remains) = popMax l se

We do the standard procedure: when we find a matching element, we have to remove it, but its subtrees l and r have to be preserved. If l subtree is empty, we can just plug the right subtree here, and end the procedure.

However, if the subtrees are not empty, they need to be merged. The easiest way to do this is to remove the rightmost element from l (this is done by the function popMax, removed element is called popped here), and use it as the top element, with remains of l (remains) as its left subtree, and r as the right subtree.

The problem is that we don't know the type of popped. This is where unsafeCoerce comes into play. popMax removes the rightmost element of l, and returns it coerced to v a (the type of e):

popMax :: HSet v -> v a -> (v a, HSet v) popMax HSetEmpty _ = undefined popMax (HSetNode se l HSetEmpty) _ = (unsafeCoerce se :: v a, l) popMax (HSetNode se l r) e = let (popped, remains) = popMax r e in (popped, HSetNode se l remains)

That's it.

Example usage:

data Cmp a = Cmp Int a (a -> Double) instance Eq1' Cmp where Cmp key1 _ _ ==% Cmp key2 _ _ = key1 == key2 instance Ord1' Cmp where compare1' (Cmp key1 _ _) (Cmp key2 _ _) = compare key1 key2 s0 = HSetEmpty s1 = insert s0 (Cmp 7 6.0 (+1.0)) s2 = insert s1 (Cmp 3 3 fromIntegral) s3 = insert s2 (Cmp 1 "1" read) s4 = insert s3 (Cmp 5 () (const 5.0)) s5 = delete s4 (Cmp 3 undefined undefined) -- prints "[1.0,5.0,7.0]" main = print $ hmap s5 $ \(Cmp _ v f) -> f v

All code in one piece.

I've read about unsafeCoerce and lifted types, but I'm still not sure:

  1. Is this use of unsafeCoerce safe for all possible values of v and a?
  2. Can I (should I?) coerce to GHC.Exts.Any instead of v a?
  3. Does ExistentialQualification introduce a hidden "vtable" here? Would GADTs have?

Bonus questions:

  1. If I change the first $ to a . in main, it doesn't compile (both with Rank2Types and RankNTypes). Why?
  2. Is there a better way to implement a heterogeneous set?

I've finally made a reddit account after years of lurking, so I'm sorry for posting such a wall of text without any previous contributions. Thanks for reading.

submitted by willIEverGraduate
[link] [6 comments]
Categories: Incoming News

Signal Processing Library

haskell-cafe - Fri, 07/04/2014 - 6:19pm
Hello: I'm working on my Master's Thesis, and I need a signal processing library that can compute FFTs and autocorrelation on discrete data. Doesn't anyone have experience with such a package in Haskell? I appreciate your time. Sincerely, Jeremy Wright _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe< at >
Categories: Offsite Discussion

GHC plans for 7.10.1

Haskell on Reddit - Fri, 07/04/2014 - 5:57pm
Categories: Incoming News

Ken T Takusagawa: [mvoghuaz] One-dimensional puzzle generator

Planet Haskell - Fri, 07/04/2014 - 5:12pm

Here is a one-dimensional jigsaw puzzle generator implemented in Haskell, creating one-dimensional instances of the exact cover problem.

For generation purposes, the one-dimensional field is divided into n blocks each of size b.  Each of the n pieces is roughly centered on a unique block and spans at most p blocks.  The arguments to the program are b p n.

Each generated piece is specified by a list of coordinates offset from its leftmost coordinate.  Each individual piece is typically not contiguous; that would make the puzzle trivial to solve. Solve the puzzle by finding the offset of each piece in the field so that the field is exactly covered by all the pieces.

There is a "edge effect" flaw such that pieces near the edge tend to span less than p blocks.

Example run with parameters 10 5 10:
Pieces are:

Solution is the concatenation of:

Motivation is to generate random inputs to Knuth's Dancing Links DLX algorithm.  What puzzle parameters generate difficult puzzles?

Categories: Offsite Blogs

Robin KAY: HsQML released

Planet Haskell - Fri, 07/04/2014 - 3:36pm
I've been meaning start blogging again for ages, and this seemed to be as good a time as any. I've just released HsQML and uploaded it to Hackage. This minor point release fixes two issues:

Firstly, API changes in Cabal 1.18 broke HsQML's rather involved Setup.hs. I didn't want mandate that users have the latest Cabal library, so I investigated a couple of different options for supporting both the old and new. There are no really pretty solutions here and I ended up using Template Haskell to select between two different sets of utility functions.

Secondly, the text package has recently gone through two major version changes under the PVP. I've widened the Cabal version constraint to permit both text-1.0 and text-1.1.

Hope you enjoy!

release- - 2014.01.18

* Added support for Cabal 1.18 API.
* Relaxed Cabal dependency constraint on 'text'.
Categories: Offsite Blogs

Robin KAY: HsQML released

Planet Haskell - Fri, 07/04/2014 - 3:35pm
Yesterday, I made new a minor release of HsQML in order to address two issues with using it interactively via GHCi. As usual, it's available for download from Hackage. One little mistake did slip in however, in that I forget to change the darcs repository listed in the package cabal file to the Qt 4 branch. The main trunk is now being used for porting to Qt 5.

An explanation of the GHCi problems follows:

GHCi has traditionally had a number of limitations owing to the built-in linker it uses to load static object files dynamically. The linker is capable enough to load the output of GHC and any simple FFI C code that might be included in a library, but it can't cope with some of the relocations emitted by a C++ compiler. Originally, it wasn't even capable of reading the same archive libraries used by the GHC compiler for linking, and required that Cabal produce special compounded object files for it to use.

The C++ limitation was an issue for HsQML because Qt is a C++ library and hence HsQML needs to include some C++ code as part of its binding layer. I made use of the fact that GHCi depended on special object files in order to incorporate a workaround especially for GHCi. HsQML's build script modifies the build process by removing the objects containing C++ code from being compounded into the special object file, and places them into a separate shared library which is then referenced by the package's extra-ghci-libraries field. GHCi will hence load the shared library and the compiled C++ code within using the system linker, thereby avoiding the problems with its own.

However, it came to my attention recently* than this strategy had run into trouble as GHCi can now load regular archive libraries directly, supplanting the need for special object files. I discovered that the Fedora Linux had modified their distribution of GHC to disable generating the GHCi objects by default. Furthermore, that this behaviour would become the new standard default with Cabal 1.18. This broke HsQML with GHCi because because the aforementioned workaround didn't apply to the regular archive libraries and so GHCi's linker couldn't handle the C++ object files contained within.

I didn't want to simply apply the same workaround to the archive libraries as to the GHCi ones because that would introduce dealing with an additional magic shared library to users who simply wanted to compile their applications. The modification I've applied for this release was therefore to add code to Setup.hs to force (re-)enable generating the special GHCi object files under certain circumstances.

The impact of this issue is likely to decrease over time as GHC now also supports producing shared libraries from Haskell code in addition to static ones. This means that, going forward, the entirety of HsQML can be built as a shared library and GHCi can load it using the system linked without difficulty. My understanding is that this behaviour will become the default with GHC 7.8 for platforms other than Windows.

Hence, the rule is that generating GHCi object files is only force enabled if shared libraries are not enabled. The forcing behaviour can be disabled by passing -f-ForceGHCiLib to cabal-install.

The other issue I found that's fixed with this release is that GHCi had problems finding the workaround shared library on Windows. Unlike other platforms, the extra-ghci-libraries field needed to include the "lib" prefix to the referenced library name in order for Windows GHCi to find it without the library being on the PATH. With that fixed, HsQML should now work with GHCi out of the box on all platforms.

Now, back to working on the Qt 5 port!

release- - 2014.02.01

* Added mechanism to force enable GHCi workaround library.
* Fixed reference name of extra GHCi library on Windows.
* Thanks to rnons.
Categories: Offsite Blogs

Robin KAY: Using the Connections element with HsQML

Planet Haskell - Fri, 07/04/2014 - 3:35pm
I was asked recently if the Connections element could be used to declaratively connect QML actions to signals defined in Haskell code. I wasn't completely sure if it would work off-hand so I wrote the following example program with HsQML 0.2.x to find out (Hint: the answer is yes).

To begin with, we need a Haskell program which will load a QML document and fire off some signals. The following program forks off a thread which blocks for the user to enter a new line in the terminal window and fires a signal every time they do. The context object has two members, the signal we're experimenting with and a property called 'self' whose function will become apparent shortly.

{-# LANGUAGE DeriveDataTypeable, TypeFamilies #-}
import Graphics.QML
import Data.Typeable
import Data.Tagged
import Control.Concurrent
import Control.Monad

main :: IO ()
main = do
    ctx <- newObject MainObject
    tid <- forkIO $ forever $ do
        putStrLn "Press ENTER to run animation"
        void $ getLine
        fireSignal (Tagged ctx ::
            Tagged TheSignal (ObjRef MainObject))
    runEngineLoop defaultEngineConfig {
        contextObject = Just $ anyObjRef ctx}
    killThread tid

data TheSignal deriving Typeable
instance SignalKey TheSignal where
    type SignalParams TheSignal = IO ()

data MainObject = MainObject deriving Typeable
instance Object MainObject where
    classDef = defClass [
        defPropertyRO "self" ((\x -> return x) ::
            ObjRef MainObject -> IO (ObjRef MainObject)),
        defSignal (Tagged "theSignal" ::
            Tagged TheSignal String)]
The QML document to accompany the above program follows below. It should be placed in a file called 'main.qml' in order to be loaded by the defaultEngineConfig. You could set the initialURL field to something else if you wanted, but I'm trying to keep the code short.

import Qt 4.7
Rectangle {
    id: root
    width: 500; height: 500
    color: "red"
    Rectangle {
        id: square
        x: 150; y: 150; width: 200; height: 200
        color: "yellow"
        Rectangle {
            width: 50; height: 50; color: "black"
        transform: Rotation {
            id: rotateSquare
            origin.x: 100; origin.y: 100; angle: 0
        NumberAnimation {
            id: rotateAnim
            target: rotateSquare; property: "angle"
            from: 0; to: 360; duration: 1500
        Connections {
            target: self
            onTheSignal: rotateAnim.start()
The code for the Connections element is highlighted in bold. Of its two attributes, the first, called 'target', specifies the object with signals that we want to bind handlers to. In this example the signal is a member of the global object and this complicates matters because it's not straightforward to write an expression which yields the global object. Hence, I placed the 'self' property on the global object to provide a convenient way of the getting a reference to it.

There are ways to get the global object, but they're not particularly pretty and I don't fully trust that kind of thing inside Qt's script environment anyway.

The second attribute specifies the signal binding. Specifically, the attribute name identifies the signal and is derived by pre-pending the string 'on' to the actual signal name. Hence, in this case, binding to 'theSignal' is specified using the attribute 'onTheSignal'. The value of the attribute is the JavaScript code to be executed when the signal fires. In our example it causes a simple little animation to occur.

Up to now, the only example I provided of using signals was the hsqml-morris demo application. It's not a great example of idiomatic QML because it uses a big chunk of JavaScript to work around some of the present limitations of HsQML's marshalling facilities (e.g. no lists/arrays). It makes no great attempt to be a "pure" QML application, so it just calls the signal's connect() method to attach it via JavaScript.

You could use the same approach with this test program by replacing the Connections element with the following code snippet:

        Component.onCompleted: {

The 'self' property is superfluous here because we can access the signal member on the global object directly. However, it's a slightly unfair comparison because the JavaScript code only covers connecting to the signal, whereas the Connections element also handles disconnections. When you're dynamically creating and destroying Components using things like the Repeater element, this is important to prevent overloading your signals with handlers that are never cleaned up.

The Connections element also allows the target attribute to be specified with a property or dynamic expression. If the value of the target expression changes at runtime then all the signal handlers will be disconnected and reconnected to the new object.

Addendum: Writing this example has made me think that HsQML relies too heavily on top-level data and instance declarations. I'd like to rectify that in the future by making QML classes first-class values on the Haskell side.
Categories: Offsite Blogs

Robin KAY: HsQML released: Now with Qt 5

Planet Haskell - Fri, 07/04/2014 - 3:35pm
I've just made a new major release of HsQML, my Haskell binding for the Qt Quick GUI framework. You can download it from Hackage in the usual manner.

This is a particularly exciting release because it's the first to have been ported over to use Qt 5. Previously, HsQML was developed against an older version of the Qt Quick technology which shipped as part of Qt 4.7 and 4.8. Support for Qt 5 has been a constant theme in the e-mails I get concerning HsQML for some time and so I'm pleased to finally deliver on that point.

There are also number of other improvements to the library which should allow more idiomatic QML code and hence reduce the need for helper JavaScript. Properties now support an associated notify signal which allows QML to automatically update in response to property changes rather than needing manual signal handlers. Also, lists and Maybe values can be marshalled between Haskell and QML natively, again reducing friction between the two environments.

The API has been redesigned slightly so that object classes and signal keys can be defined directly inside Haskell functions in addition to the older type-class based method. It's unclear yet if this style is wholly superior but, for smaller programs at least, it permits greater clarity and much less verbosity.

Finally, although still far from comprehensive, I've spent some time trying to improve the documentation on my web-site. It now provides some more substantial examples and goes into greater depth. The complete buildable source code for these examples is contained in the hsqml-demo-samples package. Also, the original Nine Men's Morris demo application is still available, but the package has been renamed to hsqml-demo-morris.

release- - 2014.05.04

* Ported to Qt 5 and Qt Quick 2
* Added type-free mechanism for defining classes.
* Added type-free mechanism for defining signal keys.
* Added property signals.
* Added marshallers for Bool, Maybe, and lists.
* Added less polymorphic aliases for def functions.
* Replaced Tagged with Proxy in public API.
* Removed marshallers for URI and String.
* New design for marshalling type-classes (again).
* Generalised facility for user-defined Marshal instances.
* Relaxed Cabal dependency constraint on 'QuickCheck'.
* Fixed GHCi on Windows with pre-7.8 GHC.
Categories: Offsite Blogs

Robin KAY: HsQML released

Planet Haskell - Fri, 07/04/2014 - 3:35pm
I've just released HsQML which, as usual, is available for download from Hackage. This release fixes several stability issues and also introduces a facility for defining properties with the CONST attribute.

If you use a property defined on one of your Haskell objects in a QML expression and that property doesn't have an associated signal, then Qt will print the following warning:

Expression depends on non-NOTIFYable properties

For mutable objects, the accurately informs us that QML has no way of knowing if the value of that property changes. However, when using Haskell, we often prefer to work with immutable values and there was previously no way of informing Qt that the value would never change. Previously, the only course of action was to specify a dummy signal or to use nullary methods instead of properties. You can now use the new defPropertyConst function instead of defPropertyRO to specify that an associated signal is unnecessary and suppress this warning.

As an aside, Christopher Reichert has just written a blog post about using HsQML which is well worth the read.

release- - 2014.06.11

* Added properties with constant annotation.
* Added runtime warning for users of the non-threaded RTS.
* Added non-TH version of Setup.hs.
* Relaxed Cabal dependency constraint on 'transformers'.
* Fixed premature garbage collection of QML objects.
* Fixed intermittent crash on exit when firing signals.
* Fixed crash when using Cmd-Q to exit on MacOS.
Categories: Offsite Blogs

HART 2014 - deadline extended

General haskell list - Fri, 07/04/2014 - 3:11pm
We extended the deadline until 12th July. ========================================= CALL FOR PAPERS Second Workshop on Haskell And Rewriting Techniques (HART 2014) To be held on September 5, co-located with ICFP 2014, the Haskell Symposium, etc., in Gothenburg. Haskell is an advanced purely-functional programming language. Pure functional programming is programming with equations, often defined by pattern-matching. Rewriting is the science of replacing equals by equals and thus a very powerful method for dealing with equations, often constructor-based. There are strong connections between Haskell (or generally, pure functional) programming and rewriting. The purpose of the HART workshop is to foster those connections. In addition to an invited talk by Oleg Kiselyov, we plan a half day of discussions, in an informal setting, on how Haskell (and related languages) and rewriting techniques and theories can cross-fert
Categories: Incoming News

How viable is using Haskell to make music? Should I be using Clojure + Overtone instead?

Haskell on Reddit - Fri, 07/04/2014 - 3:06pm


I'm interested in learning a functional programming language, and I'm also interested in making music using code (i.e. 'live coding').

Haskell is the functional language I really want to learn, but it doesn't seem to have a lively and active music making community, unlike Clojure with Overtone + Supercollider. So far I've stumbled across Tidal, which while incredibly cool, isn't designed to fulfil all your music making needs, unlike Overtone.

So, what are you thoughts? Should I try and get over the abundance of brackets + the JVM, and go with Clojure?


edit: I found this, it looks cool.

submitted by MrPopinjay
[link] [24 comments]
Categories: Incoming News

Request for code review: Dynamic programming

Haskell on Reddit - Fri, 07/04/2014 - 2:46pm

A recent working-paper A Comparison of Programming Languages in Economics compares the performance of different languages for a dynamic optimization problem arising in economics. The original code is on GitHub.

The authors have not considered any functional programming languages, though they promise to do so in a later paper. I have independently reimplemented their program in Haskell

My program, which uses REPA runs about 3 times slower than the authors' C++ program. I would greatly appreciate comments on my code, particularly about ways it can be made faster without sacrificing the quality of expression too much. I do not want to end up writing C++ in Haskell.

submitted by yomritoyj
[link] [9 comments]
Categories: Incoming News