[Haskell-cafe] Proposal: New syntax for Haskell
Timon Gehr
timon.gehr at gmx.ch
Tue Sep 10 14:41:38 CEST 2013
On 09/10/2013 09:30 AM, Niklas Hambüchen wrote:
> Impressed by the productivity of my Ruby-writing friends, I have
> recently come across Cucumber: http://cukes.info
>
>
> It is a great tool for specifying tests and programs in natural
> language, and especially easy to learn for beginners.
>
> I propose that we add a Cucumber syntax for Haskell, with the extension
> ".chs", next to .hs and .lhs.
>
>
> Code written in cucumber syntax is concise and easy to read: You can
> find some example code in https://gist.github.com/nh2/6505995. Quoting
> from that:
>
> Feature: The Data.List module
>
> In order to be able to use lists
> As a programmer
> I want a module that defines list functions
>
> Scenario: Defining the function foldl
> Given I want do define foldl
> Which has the type (in brackets) a to b to a (end of brackets),
> to a, to list of b, to a
> And my arguments are called f, acc, and l
> When l is empty
> Then the result better be acc
> Otherwise l is x cons xs
> Then the result should be foldl f (in brackets) f acc x
> (end of brackets) xs
>
>
> PS: People even already started a testing framework for Haskell in it:
> https://github.com/sol/cucumber-haskell#cucumber-for-haskell
>
The above hardly is an acceptable state of affairs. While I appreciate
the effort, clearly Cucumber is a rather limited tool and should be
replaced by something more sophisticated that actually delivers the
promises of conciseness and being easy to read.
My first shot (this can probably be made even more concise and/or easier
to read):
Feature: The Data.List module
In order to be able to use lists more conveniently
As a programmer
I want a module that defines some common operations on lists
Scenario: Defining the function 'foldl'
Given I want to define 'foldl'
Which whenever given a thing that whenever given a thing of some
first kind will give a thing that whenever given a thing of some second
kind will give a thing of the first kind again, will give something that
whenever given a thing of the first kind will give something that
whenever given a list containing things of the second kind will give
something of the first kind.
When the list is empty
Then the result better be the aforementioned thing of the first kind
Otherwise the list has a first thing in it and the remaining things
form a list again. Then we get the result by giving to 'foldl' the first
thing mentioned and to the result we give the result we get by giving
the first thing in the list to the thing we get by giving the thing of
the first kind to the thing we already gave to 'foldl' and then give to
what we get the list of remaining things.
More information about the Haskell-Cafe
mailing list