News aggregator

Are transformers the answer to this problem?

Haskell on Reddit - Tue, 07/01/2014 - 8:43am

I'm writing a small program (an extension of a Pokemon game that got posted here a while ago) where I'm trying to not use IO as much as possible. The program relies on randomness (picking a random Pokemon and move) and on writing (say things like "Pokemon X attacked you for Y damage!").

Again, I'm trying NOT to use IO, so instead I'm using Rand (Control.Monad.Random) and Writer. Now, I have a couple of functions that return Rand g a (where a can be a pokemon name or move), but I would like to "log" the name and move after they come in.

Here's a simplified version of what I'm trying to do:

battle :: _ battle = do move <- getRandomMove -- returns an Rand g Move tell ["Pokemon attacked you with " ++ name move] damage <- calculateDamage -- returns an Rand g Damage tell ["And did " ++ damage] battle

Of course, this doesn't work (I'm mixing my Rands and Writers). I thought "maybe this is what Transformers are for?"). I tried using WriterT and RandT in a combination of ways, but I always go stuck, which makes me think that's not right either.

So my question are:

  • Are transformers the answer to my problem?
  • If so, how do you use them? (I'm failing to understands them from the tutorials I've found online)
  • If not, how could I solve this problem?

Edit: Formatting Edit2: battle is recursive

submitted by Die-Nacht
[link] [13 comments]
Categories: Incoming News

Algorithm for labeling same-colored regions in a 2Darray?

haskell-cafe - Tue, 07/01/2014 - 4:17am
(Apparently joining the list through the Google Groups interface doesn't work, but the post still shows up there. Sorry if you see this twice!) For fun, I'm writing a rules engine for the board game Go (in Haskell obviously). I have a board, which is a grid of spaces that can contain a black piece, a white piece, or nothing. Part of what i need to do is to detect regions of the same "color" (black, white, or empty) and get information about them like their size, the color of the bordering spaces, etc. Regions are bounded by other colors or the board edges in cardinal directions. I'm just starting on this so I haven't picked my data structures yet, but Vector (Vector _) or Map (Int, Int) _ are what I've toyed with. I have a vague idea of how I would go about this in an imperative language with mutation. I'd iterate over the board, keeping lists of points contained in the same region, combining (relabeling) regions if they happen to connect later on. (I realize there are probably better algorithms in those l
Categories: Offsite Discussion

PhD opportunities at the University of Birmingham

Haskell on Reddit - Tue, 07/01/2014 - 3:49am

We have a number of openings for PhD study at the University of Birmingham, and we also have an imminent funding deadline, so please contact me (or any of us in the theory group at Birmingham) immediately if you're interested.

I personally am looking for students interested in designing the next generation of functional languages. You can find a fuller announcement here.

submitted by neelk
[link] [3 comments]
Categories: Incoming News

Making new Unboxed Algebraic Types? (A Repa Problem)

haskell-cafe - Mon, 06/30/2014 - 7:55pm
Hi, could someone offer som advice on handling composite types with the Repa library? I can see a /long/ way around my problem, but I wonder what is the /best/ way ... The problem is that I am trying to parallellise a probabilistic algorithm using Repa. To handle pseudo-randomness in parallel, I couple each data element with a generator state, in a tuple. The generator state is of type TFGen (tf-random package) or StdGen¹ (random package), neither of which is an Unbox instance. Hence, I have been using boxed repa arrays. The code does not execute in parallel, and if I understand correctly this is because of the Boxed type. There is a workaround², but that requires an NFData instance. To make a NFData instance and work through the code to support it should be as simple as it is tedious, but it would still leave the other drawbacks of a boxed type. (In particular, I do sequential fold because the Repa fold function did not support boxed types.) I could of course rewrite the published libraries to us
Categories: Offsite Discussion

Haskell Wiki user account creation

haskell-cafe - Mon, 06/30/2014 - 4:33pm
Hi, I read the following note at the log-in page of haskell wiki: NOTE: Automatic wiki account creation has been disabled. If you would like an account please email "nominolo" (at the email service from Google) or on the haskell-cafe mailing list. Does anyone know the exact email address I should be sending to (is it nominolo< at > Thanks, Haitham _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe< at >
Categories: Offsite Discussion

ANN: rest

haskell-cafe - Mon, 06/30/2014 - 3:27pm
We at Silk are proud to announce the release of our Haskell REST framework `rest'. Please see the related blog post for more information: Cheers, Adam _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe< at >
Categories: Offsite Discussion

FARM 2014 Call for Participation

General haskell list - Mon, 06/30/2014 - 12:11pm
Dear Haskell interested, Please find enclosed the call for participation in FARM 2014: 2nd ACM SIGPLAN International Workshop on Functional Art, Music, Modelling and Design, co-located with ICFP 2014v in Gothenburg, September. All the best, /Henrik ---------- FARM 2014 2nd ACM SIGPLAN International Workshop on Functional Art, Music, Modelling and Design Gothenburg, Sweden; 6 September, 2014 The ACM SIGPLAN International Workshop on Functional Art, Music, Modelling and Design (FARM) gathers together people who are harnessing functional techniques in the pursuit of creativity and expression. Functional Programming has emerged as a mainstream software development paradigm, and its artistic and creative use is booming. A growing number of software toolkits, frameworks and environments for art, music and design now employ functional programming languages and techniques. FARM is a forum for exploration and critical evaluation of these developme
Categories: Incoming News

Munich Haskell Meeting

haskell-cafe - Mon, 06/30/2014 - 8:27am
Dear all, today again is out monthly Haskell Meeting in Munich. I completly forgot inviting you! Sorry! Today at 19h30, we will meet here: I will try to reserve a table for 10 to 12 persons. If the weather is fine, it will be outside. Please be early, because I cannot defend the table very long if nobody shows up! Cheers, Heinrich
Categories: Offsite Discussion

Silk: Announcing rest - A Haskell REST framework

Planet Haskell - Mon, 06/30/2014 - 8:22am

We are excited to officially announce the open source release of our REST framework rest!

rest is a set of packages used to write, document, and use RESTful applications. You write your API in Haskell using rest's DSL. This API can then be run in different web frameworks like happstack, snap, or wai. Additionally, you can automatically generate documentation from it, as well as client libraries for Haskell and Javascript. We have been using it in production for most of our services for a long time and we like it so much that we decided to share it with the public.

If you want to start using rest, check out the tutorial or the example application. You can also come to the Haskell Exchange 2014 where Erik will give a talk about rest. We’d also be happy to answer any questions you have, shoot us an e-mail!

The most important packages are:

  • rest-core: A DSL for defining versioned and web server agnostic REST resources. This is the workhorse of the framework
  • rest-gen: Automatically generates documentation, Haskell, JavaScript, and Ruby clients from a rest API
  • rest-snap, rest-happstack, rest-wai: Drivers for running resources using the web server of your choice

We have also released other packages that are either used by or can be used with rest:

  • rest-client: Used by haskell clients generated by rest-gen
  • rest-types: Types used by the other rest packages
  • json-schema: Define and derive schemas for JSON serializations
  • generic-aeson: Generically derives JSON serializations for data types minimalistically
  • regular-xmlpickler: Generically derives XML serializations for data types
  • aeson-utils: Utilities for working with Aeson.
  • hxt-pickle-utils: Utility functions for using HXT picklers
  • multipart: HTTP Multipart implementation forked from the cgi package
  • rest-stringmap: Maps with string-like keys with built-in serialization to XML and JSON (since JSON doesn’t allow arbitrary keys)
  • code-builder: String manipulation library for code generation

We had a great time working on rest at ZuriHac (thanks for organizing, Better!) and we are happy to see that a lot of people were interested in our work. We got a lot done, here are some highlights:

  • Erik wrote an introductory tutorial to rest
  • Håkan Thörngren rewrote the rest-gen Haskell code generator to use haskell-src-exts, it was released in rest-gen-0.14
  • Christian Berentsen did several things:
    • Cleaned up the interface of json-schema, it was released in json-schema-0.6
    • Added support for outputing Fay compatible json as a separate output type (we want to make it easier to extend rest with more output types so things like this can go in external packages)
    • Implemented a generic API discovery resource that you can hook into your API with no configuration
  • Tom Lokhorst helped out with some always appreciated bug fixing
  • Sebas wrote the rest-wai driver to make sure everyone can use the web server they prefer together with rest
  • Adam worked on the rest-example application and rewrote parts of rest-gen to make the code generator and the library interface simpler
  • wiz did performance benchmarks and created a script to generate haddocks for rest itself

I hope I didn’t forget anyone. A big thanks to everyone who participated!

All the mentioned projects are available on hackage and in public repositories on github. We also created a public mailing list for all our open source projects.

We use these packages to write our Haskell API code for Silk.
Join our team if you enjoy this stuff too, we’re hiring!
Categories: Offsite Blogs

Smallcheck Depth

haskell-cafe - Sun, 06/29/2014 - 11:44pm
The docs for smallcheck, and the original paper, say that the depth is the depth of nested constructor applications. For some reason this behavior has changed in newer versions of Smallcheck and maybe someone can shed some light on why. For instance, I would think the depth of True and False is 0, as there are no nested constructors. Sure enough, in Smallcheck 0.2.1, (series 0) :: [Bool] gives [True, False]. Yet in smallcheck 1.1.1, (list 0 series) :: [Bool] gives []. Thanks. Omari _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe< at >
Categories: Offsite Discussion

Is there a good way to work backwards on a list?

Haskell on Reddit - Sun, 06/29/2014 - 11:41pm

I have to perform an operation on every other element of the list starting from the end; I'm curious if there's a good way of doing that better than calculating the length of the list beforehand or reversing it, performing the operation, and reversing again.

submitted by iobender
[link] [17 comments]
Categories: Incoming News

Side Effects?

Haskell on Reddit - Sun, 06/29/2014 - 6:05pm

Hello, I am quite new to Haskell and functional programming in general. My question has to do with side effects. I'm working through Yet Another Haskell Tutorial and am at the section on user input. Specifically my question has to do with this quote on page 32 of the PDF:

"After all, suppose you have a function that reads a string from the keyboard. If you call this function twice, and the user types something the first time and something else the second time, then you no longer have a function, since it would return two different values."

What if the user types the same name twice? In other words given the same input: "Kelly", the function always outputs the same message: "Hello Kelly" I don't understand how this is producing a side effect since given the same input, the function produces the same output. This seems to me to be the same as calling a factorial function with the input of 5 and getting output 120. Or calling the function with 6 and getting 720.

I hope this question isn't too elementary for the subreddit, but I appreciate any help for a n00b like me!

submitted by bacaholic
[link] [20 comments]
Categories: Incoming News