Commit 6530fd1d authored by Tobias Dammers's avatar Tobias Dammers 🦈

Fix markdown link syntax

parent cc1a7a6a
......@@ -6,16 +6,16 @@ At the first GHC Hackathon (Portland 2006), the two Simons gave a number of info
The quality of the audio or (particularly) video may not be great. They are intended mostly as a guide to the wiki commentary, so try to make sure you can see the wiki pages side by side with the video, because it may be difficult to make out the visual details otherwise.
1. [ Intro](http://www.youtube.com/watch?v=_ywd5BOwPd4&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI) to the Hackathon, purpose of the event (6'47")
1. [ Documentation](http://www.youtube.com/watch?v=RAKZvIiP2tk&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI) - general orientation around the wiki (9'01")
1. [ Getting and Building](http://www.youtube.com/watch?v=zkMJ6GQpGyc&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI), layout of the source tree, how to set up build.mk (23'43")
1. [ Compilation Pipeline I](http://www.youtube.com/watch?v=dzSc8ACz_mw&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI), and interface files (17'30")
1. [ Abstract Syntax](http://www.youtube.com/watch?v=lw7kbUvAmK4&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI) representation, and how it interacts with parser/renamer/typechecker (1hr03')
1. [ Compilation Pipeline II](http://www.youtube.com/watch?v=Upm_kYMgI_c&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI), the backend (10'16")
1. [ Types and Classes](http://www.youtube.com/watch?v=pN9rhQHcfCo&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI) internal representation (23'53")
1. [ Specialisation](http://www.youtube.com/watch?v=FOVJpOmnsaE&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI), getting rid of class dictionaries (7'09")
1. [ GHC Core Language](http://www.youtube.com/watch?v=EQA69dvkQIk&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI) internal representation (14'04")
1. [ STG language](http://www.youtube.com/watch?v=v0J1iZ7F7W8&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI) intermediate code (17'21")
1. [ CMM language](http://www.youtube.com/watch?v=UlD_FWl6lLc&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI) C minus minus representation (6'32")
1. [ Big picture](http://www.youtube.com/watch?v=xT8RWDwbdkA&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI) overview of the compiler pipeline (again) (20'23")
1. [Intro](http://www.youtube.com/watch?v=_ywd5BOwPd4&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI) to the Hackathon, purpose of the event (6'47")
1. [Documentation](http://www.youtube.com/watch?v=RAKZvIiP2tk&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI) - general orientation around the wiki (9'01")
1. [Getting and Building](http://www.youtube.com/watch?v=zkMJ6GQpGyc&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI), layout of the source tree, how to set up build.mk (23'43")
1. [Compilation Pipeline I](http://www.youtube.com/watch?v=dzSc8ACz_mw&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI), and interface files (17'30")
1. [Abstract Syntax](http://www.youtube.com/watch?v=lw7kbUvAmK4&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI) representation, and how it interacts with parser/renamer/typechecker (1hr03')
1. [Compilation Pipeline II](http://www.youtube.com/watch?v=Upm_kYMgI_c&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI), the backend (10'16")
1. [Types and Classes](http://www.youtube.com/watch?v=pN9rhQHcfCo&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI) internal representation (23'53")
1. [Specialisation](http://www.youtube.com/watch?v=FOVJpOmnsaE&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI), getting rid of class dictionaries (7'09")
1. [GHC Core Language](http://www.youtube.com/watch?v=EQA69dvkQIk&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI) internal representation (14'04")
1. [STG language](http://www.youtube.com/watch?v=v0J1iZ7F7W8&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI) intermediate code (17'21")
1. [CMM language](http://www.youtube.com/watch?v=UlD_FWl6lLc&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI) C minus minus representation (6'32")
1. [Big picture](http://www.youtube.com/watch?v=xT8RWDwbdkA&list=PLBkRCigjPwyeCSD_DFxpd246YIF7_RDDI) overview of the compiler pipeline (again) (20'23")
1. still lots more to come...
......@@ -9,7 +9,7 @@ This list overviews the active branches in the main GHC repository.
- `wip/ext-solver`: Iavor S. Diatchki. Integrate an extrenal SMT solver with the constrain solver. Mostly for working with type-level naturals at the moment.
- `ghc-lwc2`: **Lightweight concurrency substrate support**. KC Sivaramakrishnan. This implements an evolution of Peng Li's original concept of implementing a lot of the concurrency substrate in the RTS *in Haskell*. The design is described in a paper, "Composable Scheduler Activations for Haskell", found here: [ http://research.microsoft.com/en-us/um/people/simonpj/papers/lw-conc/lwc-hs13.pdf](http://research.microsoft.com/en-us/um/people/simonpj/papers/lw-conc/lwc-hs13.pdf).
- `ghc-lwc2`: **Lightweight concurrency substrate support**. KC Sivaramakrishnan. This implements an evolution of Peng Li's original concept of implementing a lot of the concurrency substrate in the RTS *in Haskell*. The design is described in a paper, "Composable Scheduler Activations for Haskell", found here: [http://research.microsoft.com/en-us/um/people/simonpj/papers/lw-conc/lwc-hs13.pdf](http://research.microsoft.com/en-us/um/people/simonpj/papers/lw-conc/lwc-hs13.pdf).
- `data-kind-syntax`: [Syntax for ''kind-only'' definitions](ghc-kinds/kinds-without-data) (i.e. without the type definition when resorting to promotion). Ready for review and merge.
......@@ -30,13 +30,13 @@ These branches are not merged, but they are also not totally dead ended, and the
- `coloured-core`: **Support for terminal color codes in `-ddump-simpl` output**. Thomas Schilling.
- `supercompiler`: **Max's Supercompiler**. Max Bolingbroke. This implements the ideas present in Max's PhD thesis, seen here: [ http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-835.html](http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-835.html)
- `supercompiler`: **Max's Supercompiler**. Max Bolingbroke. This implements the ideas present in Max's PhD thesis, seen here: [http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-835.html](http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-835.html)
- `local-gc`: **Capability-local garbage collection**. Simon Marlow & Simon PJ. As described in "Multicore Garbage Collection with Local Heaps": [ http://simonmar.github.io/bib/papers/local-gc.pdf](http://simonmar.github.io/bib/papers/local-gc.pdf)
- `local-gc`: **Capability-local garbage collection**. Simon Marlow & Simon PJ. As described in "Multicore Garbage Collection with Local Heaps": [http://simonmar.github.io/bib/papers/local-gc.pdf](http://simonmar.github.io/bib/papers/local-gc.pdf)
- `wip/nested-cpr`: **Nested CPR**. Works, but results where underwhelming. See [NestedCPR](nested-cpr). Joachim Breitner.
- `wip/cbv-conv-thunk`: **Opportunistic evaluation of thunks**. This is a side-line of `wip/nested-cpr`: Nested CPR requires a convergence analysis, and it might be worth evaluating them ([\#7596](https://gitlab.haskell.org//ghc/ghc/issues/7596)). Seems to be not as useful as hoped. Joachim Breitner.
- `wip/cbv-conv-thunk`: **Opportunistic evaluation of thunks**. This is a side-line of `wip/nested-cpr`: Nested CPR requires a convergence analysis, and it might be worth evaluating them ([\#7596](https://gitlab.haskell.org/ghc/ghc/issues/7596)). Seems to be not as useful as hoped. Joachim Breitner.
- `wip/common-context`: **Common context transformation** which can reduce code size and possibly produce more join points. See [NestedCPR](nested-cpr#common-context). Joachim Breitner.
......
......@@ -6,7 +6,7 @@ lun is a vm, running on lambda. It runs the community services.
## Accounts, Projects, etc.
See [ http://community.haskell.org/admin/procedures/](http://community.haskell.org/admin/procedures/)
See [http://community.haskell.org/admin/procedures/](http://community.haskell.org/admin/procedures/)
The tools mentioned there are in a darcs repository, which appears to be in various admin's home directories (try `locate create_account.sh`). **ToDo: put this somewhere! **
......@@ -89,7 +89,7 @@ User data for service `foo` is generally in `/srv/foo`.
## mrtg
The mrtg config is in `/etc/mrtg.cfg`, some helpers are in `/srv/local/mrtg/`, and the output goes to `/var/www/mrtg`. The URL for it is [ http://lun.haskell.org/mrtg/](http://lun.haskell.org/mrtg/)
The mrtg config is in `/etc/mrtg.cfg`, some helpers are in `/srv/local/mrtg/`, and the output goes to `/var/www/mrtg`. The URL for it is [http://lun.haskell.org/mrtg/](http://lun.haskell.org/mrtg/)
## Mailman
......@@ -106,7 +106,7 @@ The data is stored in `/var/lib/mailman`, and Mailman itself is in `/usr/lib/mai
### Web interface
The top-level list-of-lists is here: [ http://projects.haskell.org/cgi-bin/mailman/listinfo](http://projects.haskell.org/cgi-bin/mailman/listinfo).
The top-level list-of-lists is here: [http://projects.haskell.org/cgi-bin/mailman/listinfo](http://projects.haskell.org/cgi-bin/mailman/listinfo).
The web interface is configured via `/etc/apache2/sites-available/projects`, and is currently
......
# Using Amazon EC2 for building GHC
[ Amazon EC2](http://aws.amazon.com/ec2/) is a way to get access to
[Amazon EC2](http://aws.amazon.com/ec2/) is a way to get access to
remote compute server capabilities, for which you pay by the hour. It
costs [ pennies per hour](http://aws.amazon.com/ec2/pricing), so it's
costs [pennies per hour](http://aws.amazon.com/ec2/pricing), so it's
perfect for doing the occasional GHC build if
- you are cycle-challenged. e.g. I (simonmar) use this when I'm
......@@ -39,17 +39,17 @@ under 30 minutes.
Set up access to EC2 using the
[ Amazon instructions](http://docs.amazonwebservices.com/AWSEC2/latest/GettingStartedGuide/): get as far as being able to fire up an instance
[Amazon instructions](http://docs.amazonwebservices.com/AWSEC2/latest/GettingStartedGuide/): get as far as being able to fire up an instance
and SSH to it.
Using the
[ ElasticFox Firefox plugin](http://developer.amazonwebservices.com/connect/entry.jspa?externalID=609) is a good way to keep an eye on things from
[ElasticFox Firefox plugin](http://developer.amazonwebservices.com/connect/entry.jspa?externalID=609) is a good way to keep an eye on things from
Firefox, it's a more responsive alternative to using the web-based
management tool.
You'll need to install the [ Amazon EC2 command-line tools](http://docs.amazonwebservices.com/AWSEC2/latest/CommandLineReference/), which require Java to be installed (unfortunately). Install the up-to-date versions from Amazon, not the ones from your Linux distro (even the ones in Ubuntu 9.10 are too outdated). Follow the instructions, and check that things are working by running `ec2-describe-instances`.
You'll need to install the [Amazon EC2 command-line tools](http://docs.amazonwebservices.com/AWSEC2/latest/CommandLineReference/), which require Java to be installed (unfortunately). Install the up-to-date versions from Amazon, not the ones from your Linux distro (even the ones in Ubuntu 9.10 are too outdated). Follow the instructions, and check that things are working by running `ec2-describe-instances`.
Add to your `.bash_profile`, or equivalent (replacing keys as appropriate):
......@@ -92,7 +92,7 @@ particular AMI: `ami-916c81f8`. This is an EBS-backed image with
This AMI is in the US-East region for now, because that's where I
found the Ubuntu EBS-backed AMI that I used as a base. Ubuntu [ plan to make EBS-backed images](https://wiki.ubuntu.com/ServerLucidEc2EBSRoot) of future releases, so this should get easier. (see below for more AMIs you can use).
found the Ubuntu EBS-backed AMI that I used as a base. Ubuntu [plan to make EBS-backed images](https://wiki.ubuntu.com/ServerLucidEc2EBSRoot) of future releases, so this should get easier. (see below for more AMIs you can use).
Why EBS-backed? This means the image is backed by a persistent disk,
......@@ -107,7 +107,7 @@ so the script will copy up the file `~/.screenrc` if it exists.
The script is set up to create a
[ spot instance](http://aws.amazon.com/ec2/spot-instances/) request for
[spot instance](http://aws.amazon.com/ec2/spot-instances/) request for
a `c1.medium` instance, and then wait for it to be fulfilled. This is
cheaper than just creating an ordinary instance - the price varies
depending on demand, but it seems to hover around $0.06 for
......@@ -153,7 +153,7 @@ We've prepared the following AMIs for GHC development:
## Notes on how to create a new EBS image
Ubuntu EBS images are listed at [ http://uec-images.ubuntu.com/releases/](http://uec-images.ubuntu.com/releases/). e.g. for Lucid, [ http://uec-images.ubuntu.com/releases/10.04/release/](http://uec-images.ubuntu.com/releases/10.04/release/).
Ubuntu EBS images are listed at [http://uec-images.ubuntu.com/releases/](http://uec-images.ubuntu.com/releases/). e.g. for Lucid, [ http://uec-images.ubuntu.com/releases/10.04/release/](http://uec-images.ubuntu.com/releases/10.04/release/).
Start a new instance with the appropriate AMI, and SSH into it.
......
......@@ -19,7 +19,7 @@ There is ongoing work to make Annotations usable from [TemplateHaskell](template
## State Of Play
An annotations system was implemented as part of the Compiler Plugins Summer of Code project (Summer 08). It has been submitted to the HEAD, and will appear in GHC 6.12 and later. Documentation is available at [ http://downloads.haskell.org/\~ghc/latest/docs/html/users_guide/extending_ghc.html\#source-annotations](http://downloads.haskell.org/~ghc/latest/docs/html/users_guide/extending_ghc.html#source-annotations).
An annotations system was implemented as part of the Compiler Plugins Summer of Code project (Summer 08). It has been submitted to the HEAD, and will appear in GHC 6.12 and later. Documentation is available at [http://downloads.haskell.org/\~ghc/latest/docs/html/users_guide/extending_ghc.html\#source-annotations](http://downloads.haskell.org/~ghc/latest/docs/html/users_guide/extending_ghc.html#source-annotations).
The annotation system committed in the end is very simple. Basically, you can write things like this:
......@@ -236,7 +236,7 @@ Yet another disadvantage is that we will be doing some compile time compilation
#### Alternative 1 (Proposed)
Another disadvantage of this new annotations scheme is that currently there is no standard Binary class in the Haskell libraries. We propose to add such a beast by adding [ Data.Binary](http://code.haskell.org/binary/) as a boot library and supporting automatic instance deriving for it in GHC. The advantages of doing this rather than somehow reusing GHCs inbuilt Binary class are that:
Another disadvantage of this new annotations scheme is that currently there is no standard Binary class in the Haskell libraries. We propose to add such a beast by adding [Data.Binary](http://code.haskell.org/binary/) as a boot library and supporting automatic instance deriving for it in GHC. The advantages of doing this rather than somehow reusing GHCs inbuilt Binary class are that:
- It is compiler independent
......@@ -368,7 +368,7 @@ f :: ...
- We might want to add attribute metadata, so users can specify the multiplicity attributes should take, what sorts of things they can be attached to (value, type, module), and perhaps even what types they can be attached to (e.g. "only things of type a -\> Bool for some a"), similar to C\# ([ http://msdn.microsoft.com/en-us/library/tw5zxet9(VS.80).aspx](http://msdn.microsoft.com/en-us/library/tw5zxet9(VS.80).aspx)) or Java.
- We might want to add attribute metadata, so users can specify the multiplicity attributes should take, what sorts of things they can be attached to (value, type, module), and perhaps even what types they can be attached to (e.g. "only things of type a -\> Bool for some a"), similar to C\# ([http://msdn.microsoft.com/en-us/library/tw5zxet9(VS.80).aspx](http://msdn.microsoft.com/en-us/library/tw5zxet9(VS.80).aspx)) or Java.
- We might want to extend annotation syntax so you can attach multiple annotations in a single definition, like so:
......@@ -390,4 +390,4 @@ x = ...
- **(Only in SoC implementation)** I believe it would make sense to allow annotations to use the implementations of values in the module being compiled,: after all, I they can use the implementations of values in imported modules. This would filling out the relevant field with an error during compilation (for the benefit of plugins) and linking the annotation fields up to the required values after compilation. Is this a good idea?
- Have retention policies, similar to Java?
- See also the Haskell Prime ticket: [ http://hackage.haskell.org/trac/haskell-prime/ticket/88](http://hackage.haskell.org/trac/haskell-prime/ticket/88)
- See also the Haskell Prime ticket: [http://hackage.haskell.org/trac/haskell-prime/ticket/88](http://hackage.haskell.org/trac/haskell-prime/ticket/88)
......@@ -89,7 +89,7 @@ Thus, all that needs to be done is take the desugaring code in `DsForeign.hs` an
## Future work
Ideally we’d like to be able to call foreign code whose location (be it an address for C or some string for JavaScript) is only known at runtime. An ad-hoc way to achieve this right now for C is [ libffi](https://sourceware.org/libffi/), which lets us interface with code following the C calling convention programmatically. However, using such methods from Haskell is always going to incur some overhead. For instance, the [ current bindings](http://hackage.haskell.org/package/libffi) to libffi for Haskell receive the arguments to the C function to call in an Haskell list.
Ideally we’d like to be able to call foreign code whose location (be it an address for C or some string for JavaScript) is only known at runtime. An ad-hoc way to achieve this right now for C is [libffi](https://sourceware.org/libffi/), which lets us interface with code following the C calling convention programmatically. However, using such methods from Haskell is always going to incur some overhead. For instance, the [ current bindings](http://hackage.haskell.org/package/libffi) to libffi for Haskell receive the arguments to the C function to call in an Haskell list.
For this reason, after we implement anonymous FFI imports as described we plan to extend them to be able to accept the location of the code at runtime, as a standard Haskell expression.
......@@ -61,7 +61,7 @@ Since every `RdrName` of interest is `Located`, it would be enough to add a list
#### C. Create a separate table mapping each `RdrName` occurrence `SrcSpan` to the corresponding `Name`.
This is the approach currently used in `HaRe`, and is presented for inclusion in the GHC API as [ https://phabricator.haskell.org/D5330](https://phabricator.haskell.org/D5330)
This is the approach currently used in `HaRe`, and is presented for inclusion in the GHC API as [https://phabricator.haskell.org/D5330](https://phabricator.haskell.org/D5330)
#### D. Modify the `RenamedSource` AST so that it also fully represents the parsed source file, when used with the API Annotations.
......
......@@ -4,10 +4,10 @@
This is a proposal to add support to GHC for desugaring do-notation into Applicative expressions where possible.
It's described in some detail in the paper: [ Desugaring Haskell’s do-notation Into Applicative Operations](https://www.microsoft.com/en-us/research/publication/desugaring-haskells-do-notation-into-applicative-operations/) (ICFP'16).
It's described in some detail in the paper: [Desugaring Haskell’s do-notation Into Applicative Operations](https://www.microsoft.com/en-us/research/publication/desugaring-haskells-do-notation-into-applicative-operations/) (ICFP'16).
An implementation was merged for GHC8: [ https://github.com/ghc/ghc/commit/8ecf6d8f7dfee9e5b1844cd196f83f00f3b6b879](https://github.com/ghc/ghc/commit/8ecf6d8f7dfee9e5b1844cd196f83f00f3b6b879).
An implementation was merged for GHC8: [https://github.com/ghc/ghc/commit/8ecf6d8f7dfee9e5b1844cd196f83f00f3b6b879](https://github.com/ghc/ghc/commit/8ecf6d8f7dfee9e5b1844cd196f83f00f3b6b879).
See also [RecursiveDo](recursive-do)
......@@ -22,33 +22,33 @@ Use Keyword = `ApplicativeDo` to ensure that a ticket ends up on these lists.
**Open Tickets:**
<table><tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/10892">#10892</a></th>
<table><tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/10892">#10892</a></th>
<td>ApplicativeDo should use *&gt; and &lt;*</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/10976">#10976</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/10976">#10976</a></th>
<td>Applicative Comprehensions</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/11982">#11982</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/11982">#11982</a></th>
<td>Typechecking fails for parallel monad comprehensions with polymorphic let (GHC 7.10.3 through 8.6.3)</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/13309">#13309</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/13309">#13309</a></th>
<td>Use liftA2 in ApplicativeDo</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/13511">#13511</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/13511">#13511</a></th>
<td>ApplicativeDo return case doesn&apos;t handle lets</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/13905">#13905</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/13905">#13905</a></th>
<td>ApplicativeDo is too strict with newtype patterns</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/13906">#13906</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/13906">#13906</a></th>
<td>ApplicativeDo doesn&apos;t handle existentials as well as it could</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/14252">#14252</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/14252">#14252</a></th>
<td>ApplicativeDo: Add compiler message about irrefutable pattern matches and Monad constraints</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/14700">#14700</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/14700">#14700</a></th>
<td>ApplicativeDo in MonadComprehensions</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/15016">#15016</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/15016">#15016</a></th>
<td>Referencing a do-bound variable in a rec block with ApplicativeDo results in variable not in scope during type checking</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/15100">#15100</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/15100">#15100</a></th>
<td>`ApplicativeDo` needlessly uses `join` too much</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/15344">#15344</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/15344">#15344</a></th>
<td>ApplicativeDo seems to prevent the fail method from being used</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/16135">#16135</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/16135">#16135</a></th>
<td>Panic with ExistentialQuantification and ApplicativeDo</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/16171">#16171</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/16171">#16171</a></th>
<td>&quot;ApplicativeDo&quot; disables -Wunused-do-binds?</td></tr></table>
......@@ -56,33 +56,33 @@ Use Keyword = `ApplicativeDo` to ensure that a ticket ends up on these lists.
**Closed Tickets:**
<table><tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/11607">#11607</a></th>
<table><tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/11607">#11607</a></th>
<td>ApplicativeDo easily foiled with `pure`</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/11612">#11612</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/11612">#11612</a></th>
<td>Bug in ApplicativeDo</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/11835">#11835</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/11835">#11835</a></th>
<td>ApplicativeDo failed to desugar last line with pure $ &lt;expr&gt;</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/12143">#12143</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/12143">#12143</a></th>
<td>ApplicativeDo Fails to Desugar &apos;return True&apos;</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/12490">#12490</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/12490">#12490</a></th>
<td>With RebindableSyntax, ApplicativeDo should eliminate return/pure</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/13242">#13242</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/13242">#13242</a></th>
<td>Panic &quot;StgCmmEnv: variable not found&quot; with ApplicativeDo and ExistentialQuantification</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/13648">#13648</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/13648">#13648</a></th>
<td>ApplicativeDo selects &quot;GHC.Base.Monad.return&quot; when actions are used without patterns.</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/13875">#13875</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/13875">#13875</a></th>
<td>ApplicativeDo desugaring is lazier than standard desugaring</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/14105">#14105</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/14105">#14105</a></th>
<td>ApplicativeDo causes GHC panic on irrefutable list pattern match</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/14163">#14163</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/14163">#14163</a></th>
<td>Stack Overflow with ApplicativeDo</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/14249">#14249</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/14249">#14249</a></th>
<td>ApplicativeDo: Pattern matching on a bind forces a Monad constraint</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/14471">#14471</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/14471">#14471</a></th>
<td>Certain do blocks cause TH to barf when ApplicativeDo is enabled</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/14670">#14670</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/14670">#14670</a></th>
<td>-XRebindableSyntax needs return?</td></tr>
<tr><th><a href="https://gitlab.haskell.org//ghc/ghc/issues/15422">#15422</a></th>
<tr><th><a href="https://gitlab.haskell.org/ghc/ghc/issues/15422">#15422</a></th>
<td>GHCi debugger doesn&apos;t see free variables when using ApplicativeDo</td></tr></table>
......@@ -110,7 +110,7 @@ For a type that is a `Monad`, `ApplicativeDo` implements the same semantics as t
1. Some Monads have the property that Applicative bind is more
efficient than Monad bind. Sometimes this is *really
important*, such as when the Applicative bind is
concurrent whereas the Monad bind is sequential (c.f. [ Haxl](https://github.com/facebook/Haxl)). For
concurrent whereas the Monad bind is sequential (c.f. [Haxl](https://github.com/facebook/Haxl)). For
these monads we would like the do-notation to desugar to
Applicative bind where possible, to take advantage of the improved
behaviour but without forcing the user to explicitly choose.
......@@ -284,7 +284,7 @@ Note that this isn't the only good way to translate this expression, this is als
## Syntax & spec
There's a toy implementation which includes the syntax, desugaring, transformation and some examples here: [ https://github.com/simonmar/ado/blob/52ba028cad68af578bcdfb3f1c5b905f5b9c5617/adosim.hs](https://github.com/simonmar/ado/blob/52ba028cad68af578bcdfb3f1c5b905f5b9c5617/adosim.hs)
There's a toy implementation which includes the syntax, desugaring, transformation and some examples here: [https://github.com/simonmar/ado/blob/52ba028cad68af578bcdfb3f1c5b905f5b9c5617/adosim.hs](https://github.com/simonmar/ado/blob/52ba028cad68af578bcdfb3f1c5b905f5b9c5617/adosim.hs)
Syntax:
......@@ -429,8 +429,8 @@ Note that there's no matching on "return" during desugaring, the
## Related proposals
- [ Max's proposal on haskell-cafe](http://www.haskell.org/pipermail/haskell-cafe/2011-September/095153.html)
- [ Control.Applicative.QQ.ADo](http://hackage.haskell.org/package/applicative-quoters-0.1.0.7/docs/Control-Applicative-QQ-ADo.html)
- [Max's proposal on haskell-cafe](http://www.haskell.org/pipermail/haskell-cafe/2011-September/095153.html)
- [Control.Applicative.QQ.ADo](http://hackage.haskell.org/package/applicative-quoters-0.1.0.7/docs/Control-Applicative-QQ-ADo.html)
## Implementation
......@@ -438,7 +438,7 @@ Note that there's no matching on "return" during desugaring, the
The implementation is tricky, because we want to do a transformation that affects type checking (and renaming, because we might be using `RebindableSyntax`), but we still want type errors in terms of the original source code. Therefore we calculate everything necessary to do the transformation during renaming, but leave enough information behind to reconstruct the original source code for the purposes of error messages.
See comments in [ https://phabricator.haskell.org/D729](https://phabricator.haskell.org/D729) for more details.
See comments in [https://phabricator.haskell.org/D729](https://phabricator.haskell.org/D729) for more details.
### Tricky case
......
# Overview
This page documents a proposed syntactical extension called `ArgumentDo`. The feature request is tracked at [\#10843](https://gitlab.haskell.org//ghc/ghc/issues/10843).
This page documents a proposed syntactical extension called `ArgumentDo`. The feature request is tracked at [\#10843](https://gitlab.haskell.org/ghc/ghc/issues/10843).
......@@ -41,7 +41,7 @@ withForeignPtr fptr (\ptr -> c_memcpy buf ptr size)
# Changes to the grammar
The Haskell report [ defines](https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-220003) the `lexp` nonterminal thus (`*` indicates a rule of interest):
The Haskell report [defines](https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-220003) the `lexp` nonterminal thus (`*` indicates a rule of interest):
```wiki
lexp → \ apat1 … apatn -> exp (lambda abstraction, n ≥ 1) *
......@@ -175,10 +175,10 @@ Possible modifications to the proposal include:
- Only allow `do` in argument positions, but no other constructs. This has an advantage of making a minimal change to the grammar, while addressing the most common case.
This proposal has been extensively discussed on [ haskell-cafe](https://mail.haskell.org/pipermail/haskell-cafe/2015-September/121217.html) and on [ reddit](https://www.reddit.com/r/haskell/comments/447bnw/does_argument_do_have_a_future/).
This proposal has been extensively discussed on [haskell-cafe](https://mail.haskell.org/pipermail/haskell-cafe/2015-September/121217.html) and on [ reddit](https://www.reddit.com/r/haskell/comments/447bnw/does_argument_do_have_a_future/).
On the mailing list I see roughly 13 people in favor of the proposal and 12 people against it. Some major opinions (mostly copied from [ bgmari's summary](https://ghc.haskell.org/trac/ghc/ticket/10843#comment:12)).
On the mailing list I see roughly 13 people in favor of the proposal and 12 people against it. Some major opinions (mostly copied from [bgmari's summary](https://ghc.haskell.org/trac/ghc/ticket/10843#comment:12)).
## Pros
......
......@@ -9,7 +9,7 @@ Everything from here to the "Original Page" heading is for the revival in July 2
I have an unregisterised GHC 6.8 build for the N810.
You can get the N810 GHC packages at: [ ftp://ripplelabs.com/pub/ghc-debs/](ftp://ripplelabs.com/pub/ghc-debs/)
You can get the N810 GHC packages at: [ftp://ripplelabs.com/pub/ghc-debs/](ftp://ripplelabs.com/pub/ghc-debs/)
Some other packages are required that are available elsewhere, such as gcc.
......@@ -60,9 +60,9 @@ The path /usr/local/lib/hugs/packages is in fact where the Prelude lives, howeve
Anyone know what could be wrong here?
</