├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── Setup.hs ├── archive └── 2016-index.html ├── cabal.project ├── content ├── contact.md ├── faq.md ├── ideas.html ├── ideas │ ├── codeworld-update.md │ ├── hls-cabal-project-plugin.md │ └── lh-aliases.md ├── index.md ├── news │ ├── 2016-12-08-2016-wrapup.md │ ├── 2017-02-28-2017-announce.md │ ├── 2017-04-05-getting-ready.md │ ├── 2017-04-25-student-applications-open.md │ ├── 2017-05-24-accepted-projects.md │ ├── 2017-08-04-midterm-update.md │ ├── 2017-09-15-final-results.md │ ├── 2017-12-25-call-for-ideas.md │ ├── 2018-03-14-student-applications.md │ ├── 2018-04-23-accepted-projects.md │ ├── 2018-09-01-final-results.md │ ├── 2018-12-28-call-for-ideas.md │ ├── 2019-02-26-accepted-for-gsoc.md │ ├── 2019-05-29-alga-introduction.md │ ├── 2019-07-26-testing-bipartiteness.md │ ├── 2019-08-26-alga-results.md │ ├── 2020-01-10-final-results.md │ ├── 2020-01-12-call-for-ideas.md │ ├── 2020-10-12-final-results.md │ ├── 2021-09-23-final-results.md │ ├── 2022-02-01-gsoc-changes-2022.md │ ├── 2023-05-14-summer-of-haskell-2023-project-selections.md │ ├── 2024-01-20-summer-of-haskell-2023-results.md │ └── 2024-12-08-summer-of-haskell-2024-results.md └── tips.md ├── deploy.sh ├── images ├── 2022-02-01-gsoc.png ├── asahi-net-logo.png ├── asahi-net-logo.svg ├── awake-logo.png ├── awake-logo.svg ├── codeworld-logo.png ├── company-logo.png ├── digital-asset-logo.png ├── facebook-logo.png ├── fugue-logo.png ├── galois-logo.png ├── galois-logo.svg ├── gsoc-logo.svg ├── haskell-logo.png ├── hsoc-logo.svg ├── iohk-logo.png ├── pattern.png └── tweag-io-logo.png ├── src └── Main.hs ├── stack.yaml ├── stack.yaml.lock ├── style ├── code.css └── style.css ├── summer-of-haskell.cabal └── templates ├── default.html └── news.html /.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | dist-newstyle 3 | cabal.project.local* 4 | .ghc.environment.* 5 | _cache 6 | _site 7 | .stack-work 8 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # simplified haskell-ci Travis setup 2 | # see also https://github.com/haskell-CI/haskell-ci 3 | 4 | language: haskell 5 | 6 | cache: 7 | directories: 8 | - $HOME/.cabal/store 9 | 10 | cabal: 2.4 11 | ghc: 12 | - "8.6.3" 13 | - "8.4.4" 14 | 15 | install: 16 | - cabal --version 17 | - ghc --version 18 | 19 | script: 20 | - cabal v2-update 21 | - cabal v2-build exes 22 | - cabal check 23 | - cabal v2-run exe:summer-of-haskell -- check --internal-links 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2017, Jasper Van der Jeugt 2 | 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | * Redistributions of source code must retain the above copyright 9 | notice, this list of conditions and the following disclaimer. 10 | 11 | * Redistributions in binary form must reproduce the above 12 | copyright notice, this list of conditions and the following 13 | disclaimer in the documentation and/or other materials provided 14 | with the distribution. 15 | 16 | * Neither the name of Jasper Van der Jeugt nor the names of other 17 | contributors may be used to endorse or promote products derived 18 | from this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # summer-of-haskell 2 | 3 | This is the source code for the summer of Haskell website. 4 | 5 | ## How to build this website 6 | 7 | ### Using `cabal` 8 | 9 | #### Modern method (Cabal 2.4 and newer) 10 | 11 | This is the recommended method and at the time of writing is known 12 | to work with GHC 7.10.3 through GHC 9.4.8. 13 | 14 | cabal v2-run exes -- preview 15 | 16 | #### Legacy method 17 | 18 | cabal install --only-dependencies 19 | cabal build 20 | ./dist/build/summer-of-haskell/summer-of-haskell preview 21 | 22 | ### Using stack 23 | 24 | stack build 25 | stack exec -- summer-of-haskell preview 26 | 27 | Then point your browser at `http://localhost:8000` 28 | -------------------------------------------------------------------------------- /Setup.hs: -------------------------------------------------------------------------------- 1 | import Distribution.Simple 2 | main = defaultMain 3 | -------------------------------------------------------------------------------- /archive/2016-index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Summer of Haskell - 2016 6 | 135 | 136 | 137 |
138 |
139 |

Summer of Haskell 2016

140 |

The Summer of Haskell is an effort by haskell.org to reach out to students and encourage them to contribute to the Haskell community with the aid of experienced mentors.

141 |

This program is open to college students, 18 or older, in most countries.

142 |

The general structure of our program is set up to mirror the Google Summer of Code.

143 |

Participation in the Summer of Haskell represents a similar level of commitment to taking a job or internship for the summer in terms of time investment. The compensation for accepted student projects is 5500 USD, to be paid in two lump sums, half at the beginning of the summer, and half upon receiving a passing midterm evaluation. As with the Google Summer Of Code, participation in the Summer of Haskell is not an internship or employment but simply an activity that the student performs as an independent developer for which he/she is paid a stipend.

144 |
145 |
146 | 200 |
201 |
202 |
203 |

Why are we doing this rather than simply participating in the Google Summer of Code?

204 |

haskell.org has participated in the Google Summer of Code for the last several years. Sadly, this year we were not accepted into the program. Rather than risk the supply of mentors and students drying up, we've resolved to try to go it on our own for a summer. 205 |

206 |
207 |
208 |

Am I elegible to participate as a student?

209 |

We're following the same general guidelines as the Google Summer of Code: 210 |
211 |

    212 |
  • You must be at least 18 years of age
  • 213 |
  • You must be a full or part-time student at an accredited university (or have been accepted as of April 22, 2016)
  • 214 |
  • You must be eligible to work in the country you will reside in during the program
  • 215 |
  • You must reside in a country that is not currently embargoed by the United States.
  • 216 |
217 |
218 | If you aren't sure if these conditions apply, please contact us. 219 |

220 |
221 |
222 |
223 |
224 |
225 |

Sponsors

226 |
227 | haskell.org kicked things off this year by funding a student and organizing the Summer of Haskell.
228 |
229 | Awake Networks is building a next generation network security and analytics platform. They are a proud sponsor of the Summer of Haskell and contribute broadly to the Haskell community.
230 |
231 | Haskell Book is a proud sponsor of the Summer of Haskell and provides a complete and up-to-date resource for learning Haskell, suitable whether you're completely new to Haskell or are at an intermediate level and want to deepen your understanding.
232 |
233 | YOW! Australia is a proud sponsor of the Summer of Haskell and organizes conferences throughout Australia.
234 |
235 | Chris Smith has volunteered to fund two students to work on CodeWorld in particular.
236 |
237 | Edward Kmett and Gershom Bazerman have volunteered to personally fund a student project.
238 |
239 | If you are interested in helping us fund additional students, please contact us.
240 |
241 |
242 |
243 | 244 | 245 | -------------------------------------------------------------------------------- /cabal.project: -------------------------------------------------------------------------------- 1 | -- see https://www.haskell.org/cabal/users-guide/nix-local-build-overview.html 2 | packages: . 3 | -------------------------------------------------------------------------------- /content/contact.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Contact 3 | --- 4 | 5 | # Contact 6 | 7 | The Summer of Haskell is organised by the 8 | [Haskell.org Committee](https://wiki.haskell.org/Haskell.org_committee). You 9 | can reach us by sending an email to `committee [AT] haskell.org`. 10 | 11 | There is also an IRC channel called `#haskell` on 12 | [libera](https://libera.chat/) where you can ask for help. More info on our 13 | IRC channels can be found here. 14 | -------------------------------------------------------------------------------- /content/faq.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Frequently Asked Questions 3 | --- 4 | 5 | # Faq 6 | 7 | Google Summer of Code's FAQ can be found [here](https://developers.google.com/open-source/gsoc/faq) 8 | -------------------------------------------------------------------------------- /content/ideas.html: -------------------------------------------------------------------------------- 1 |

GSoC 2025 Ideas

2 | 3 |

4 | This is a list of ideas for contributors who are considering to apply to 5 | Google Summer of Code 2025 for Haskell.org 6 |

7 | 8 |

For project maintainers

9 | 10 |

11 | Are you working on a Haskell project and you could use the help of a 12 | contributor during the summer? Consider adding it as an idea here! 13 | You can contribute ideas by sending a pull request to our 14 | github 15 | repository 16 | (example from 2024). 17 | If you just want to discuss a possible idea, 18 | please contact us. 19 |

20 | 21 |

22 | What is a good idea? Anything that improves the Haskell ecosystem is 23 | valid. The GSoC rules state that it must involve writing code 24 | primarily (as opposed to docs). 25 |

26 |

27 | Projects should be concrete and small enough in scope such 28 | that they can be finished by the contributor. Past experience has 29 | shown that keeping projects “small” is almost always a good idea. 30 |

31 |

32 | Important changes since 2021/2022: 33 | In the past, GSoC projects were expected to take up the equivalent of full 34 | time employment for a student. In 2021, this was reduced to 35 | half time positions: students were expected to work around 175 hours in a 10 36 | week period. Since 2022, contributors now have the choice between a larger 37 | (around 350 hours) or a smaller project. Ideas should indicate in which 38 | category they fall. 39 |

40 |

41 | Projects should benefit as many people as possible – e.g. an improvement to 42 | GHC will benefit more people than an update to a specific library or tool, but 43 | both are acceptable. New libraries and applications written in Haskell, 44 | rather than improvements to existing ones, are also welcome. 45 |

46 | 47 |

For students/contributors

48 |

49 | We have added some tips on writing a proposal here. 50 | Please be aware that: 51 |

52 | 61 | 62 |

Table of Contents

63 |
    64 | $for(ideas)$ 65 |
  1. $title$
  2. 66 | $endfor$ 67 |
68 | 69 | $for(ideas)$ 70 |

$title$🔗

71 | $body$ 72 | $endfor$ 73 | -------------------------------------------------------------------------------- /content/ideas/codeworld-update.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: CodeWorld GHC Update 3 | --- 4 | 5 | [CodeWorld](https://github.com/google/codeworld/) is a web-based educational environment for learning computer science using Haskell. It is based on GHCJS, an old project to compile Haskell to JavaScript with a modified GHC compiler. 6 | 7 | GHCJS is no longer a good choice, as it is difficult to keep up to date with the latest GHC versions. However, modern versions of GHC have built-in backends for both JavaScript and WebAssembly, which are more reliable and easier to maintain, and kept up to date as part of the main line of GHC development. This project would involve updating CodeWorld to use one of the new GHC backends for JavaScript or WebAssembly. 8 | 9 | This would involve updating the build system, and making any necessary changes to the CodeWorld runtime to work with the new backends. 10 | 11 | The scope of the project can be adjusted based on the desired time frame and experience of the mentee. Some questions include: 12 | 13 | - Is the goal to get a proof of concept, or a deployable replacement? 14 | - Will the rule-based requirements checker also be updated to newer GHC versions? 15 | - This requires updating the GHC API usage. 16 | - This feature is, to my knowledge, not currently used by anyone. 17 | - Will the educational dialect be updated? 18 | - If so, how do we handle unconstrained universal equality? Note that this likely requires development of a non-trivial GHC plugin. 19 | - If not, how do we deploy both versions simultaneously (if a deployable replacement is the goal)? 20 | - What additional improvements are enabled by newer GHC versions and the new backends? 21 | 22 | **Mentorship** 23 | 24 | - Chris Smith (cdsmith) 25 | - Ideally, a second mentor with experience in one or both of GHC JS/WASM backends 26 | 27 | **Difficulty and size** 28 | 29 | The difficulty of this project is medium, as there are significant infrastructure and build system challenges to address. Depending on choices made, this may become hard. 30 | 31 | The minimum size of this project is 175 hours, but there is likely more work depending on the mentee's desired scope and ideas. 32 | -------------------------------------------------------------------------------- /content/ideas/hls-cabal-project-plugin.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Language Server support for cabal.project files 3 | --- 4 | 5 | ## Goals 6 | 7 | Introduce a new Haskell Language Server plugin, which provides IDE-features for `cabal.project` files. 8 | 9 | Some possible features include: 10 | 11 | * Diagnostics 12 | * Completions of 13 | * keywords 14 | * filepaths 15 | * enum values 16 | * Syntax Highlighting 17 | 18 | The scope of the project can be adjusted based on the desired time frame and experience of the mentee. 19 | Some of these implementations can draw inspiration from the corresponding implementation in the [`hls-cabal-plugin`](https://github.com/haskell/haskell-language-server/tree/master/plugins/hls-cabal-plugin). 20 | 21 | ## Background 22 | 23 | [`cabal.project` files](https://cabal.readthedocs.io/en/latest/cabal-project-description-file.html) are often needed to configure how your project should be built. 24 | Haskell developers will often write and edit these files during their development process but as of yet, Haskell Language Server (HLS) provides no IDE support for them. 25 | 26 | Since HLS already provides IDE features for `.cabal` files it seems a natural next step to add a similar `cabal.project` plugin to HLS which provides IDE support for cabal.project files. 27 | 28 | ## Outcomes 29 | 30 | The main outcomes are pull requests with the implementation, tests, and code 31 | documentation of the implemented features. 32 | 33 | A secondary outcome is a blogpost describing the experience and the results of 34 | the project. 35 | 36 | ## Difficulty and Size 37 | 38 | The difficulty of this project is medium, as there are two rather big existing projects that developers need to understand in order to provide improvements. 39 | 40 | The minimum size of this project is 90 hours, but this can easily be extended to 175 as there is likely more work depending on the mentee’s desired scope and ideas. 41 | 42 | ## Required Skills 43 | 44 | * Read and write technical English 45 | * Haskell programming basics 46 | 47 | ## Project Mentor 48 | 49 | * Jana Chadt (VeryMilkyJoe) 50 | * Co-Mentor: Fendor 51 | -------------------------------------------------------------------------------- /content/ideas/lh-aliases.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Qualified aliases in Liquid Haskell 3 | --- 4 | 5 | ## Goals 6 | 7 | Update the implementation of [Liquid Haskell][] to allow referring to 8 | [type][] and [predicate][] aliases in qualified form. 9 | 10 | [Liquid Haskell]: https://ucsd-progsys.github.io/liquidhaskell/ 11 | [type]: https://ucsd-progsys.github.io/liquidhaskell/specifications/#type-aliases 12 | [predicate]: https://ucsd-progsys.github.io/liquidhaskell/specifications/#predicate-aliases 13 | 14 | ## Background 15 | 16 | Liquid Haskell is a verification tool for Haskell programs. The programmer 17 | writes specifications for these programs, and Liquid Haskell checks if the 18 | programs actually meet the specifications. 19 | 20 | Recently, the Liquid Haskell implementation went through [a refactoring][] to 21 | improve name resolution. Much of the names in the specification language can 22 | be qualified now, in order to dissambiguate equal names that come from different 23 | modules. There is an exception though, when it comes to type and predicate 24 | aliases. For technical reasons, this constructs have been left behind in the refactoring. 25 | 26 | [a refactoring]: https://github.com/ucsd-progsys/liquidhaskell/issues/2169 27 | 28 | As the reference documentation explains, type aliases can be used to shorten specifications. 29 | Instead of writing a spec like: 30 | 31 | ```Haskell 32 | {-@ length :: [a] -> {v:Int | v >= 0} @-} 33 | ``` 34 | 35 | one can write 36 | 37 | ```Haskell 38 | {-@ type INat = {v:Int | v >= 0} @-} 39 | {-@ length :: [a] -> INat @-} 40 | ``` 41 | 42 | Unfortunately, if there are multiple `INat` aliases in scope, Liquid Haskell does not 43 | allow to qualify the name to disambiguate. For instance, the following specification is 44 | rejected with a message that says that `SomeImport.INat` is not in scope. 45 | 46 | ```Haskell 47 | {-@ length :: [a] -> SomeImport.INat @-} 48 | ``` 49 | 50 | This project is to analyze the implementation and to design and implement a solution both 51 | for type and predicate aliases. 52 | There is a [corresponding issue][] in the Liquid Haskell repo. 53 | 54 | [corresponding issue]: https://github.com/ucsd-progsys/liquidhaskell/issues/2481 55 | 56 | ## Outcomes 57 | 58 | The main outcomes are a pull request with the implementation, tests, and code 59 | documentation, and a discussion of the analysis and the design in the corresponding 60 | issue. 61 | 62 | A secondary outcome is a blogpost describing the experience and the results of 63 | the project. 64 | 65 | ## Size 66 | 67 | Project size should be near 175 hours. The project will require a fair amount of reading of existing 68 | Haskell code, and building an understanding of how it works. Familiarity with the verification 69 | mechanisms is not necessary a priori, though some user-level understanding of Liquid Haskell 70 | is going to be needed to write tests. 71 | 72 | ## Required Skills 73 | 74 | * Read and write technical English 75 | * Haskell programming basics 76 | 77 | ## Project Mentor 78 | 79 | * Facundo Domínguez, Tweag engineer and comaintainer of Liquid Haskell 80 | -------------------------------------------------------------------------------- /content/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Home 3 | --- 4 | 5 | # Introduction 6 | 7 | The Summer of Haskell is an effort by Haskell.Org to reach out to students and 8 | encourage them to contribute to the Haskell community with the aid of 9 | experienced mentors. This program is open to all college students and newcomers 10 | to open-source Haskell contributions, age 18 years or older, in most countries. 11 | 12 | Google Summer of Code 14 | 15 | # Google Summer of Code 2025 16 | 17 | **Haskell has been selected for Google Summer of Code 2025!** 18 | 19 | Prospective contributors can begin submitting proposals against our [project ideas](/ideas.html) on March 24th. 20 | -------------------------------------------------------------------------------- /content/news/2016-12-08-2016-wrapup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Summer of Haskell 2016 Wrap-Up' 3 | author: 'Gershom B' 4 | --- 5 | 6 | We wanted to let folks know what happened with all our Summer of Haskell 7 | projects, and thank again all those who donated as individuals or sponsored 8 | students to make this possible. As a reminder, the accepted projects were 9 | announced on reddit at: 10 | 11 | 12 | 13 | * * * 14 | 15 | 1. Native Metaprogramming in Haskell 16 | 17 | This very ambitious project made significant progress, though is not 18 | yet ready for a full merge into GHC. A talk and paper on work relating 19 | to it were presented at the Haskell Implementors Workshop at ICFP, and 20 | a page on the GHC wiki describes the current status. 21 | 22 | - https://www.youtube.com/watch?v=DSWoGdfYt68 23 | - https://arxiv.org/abs/1610.04799 24 | - https://ghc.haskell.org/trac/ghc/wiki/NativeMetaprogramming 25 | 26 | 2. GHCVM - A JVM Backend for GHC 27 | 28 | Again, significant progress made on a very ambitious project, which has now 29 | been renamed to “eta”. A talk on the work done was given at the HIW, and the 30 | project is considered ready for “hobbyist use”. 31 | 32 | - https://www.youtube.com/watch?v=G4m7xFVzd50 33 | - https://github.com/typelead/eta 34 | 35 | 3. Completing the LLVM backend for Accelerate 36 | 37 | All operators of the LLVM backend are now implemented, and we’re told that 38 | the accelerate-llvm project, already usable, will be get a more proper 39 | announcement as ready for widespread use real soon now (tm). 40 | 41 | - https://github.com/AccelerateHS/accelerate-llvm 42 | - https://github.com/AccelerateHS/accelerate-llvm/commits?author=ZihengJiang 43 | 44 | 4. Hackage Improvements 45 | 46 | A whole raft of usability improvements to hackage (including the 47 | long-awaited rollout of reverse dependency tracking, and a very usable 48 | package browser interface) are undergoing final code review and polish in a 49 | PR before being rolled out. The student’s blog contains more information 50 | about what’s on the way. 51 | 52 | - http://sooryanarayan.me/blog/hsoc-testimonial/ 53 | 54 | 5. Derivable Storable and Prim instances 55 | 56 | This work resulted in both a package (usable today) and a plugin to improve 57 | the performance of the derived code. Updates on the decisions made and work 58 | done were posted to the numerical-haskell group 59 | 60 | - https://hackage.haskell.org/package/derive-storable 61 | - http://hackage.haskell.org/package/derive-storable-plugin 62 | - https://groups.google.com/forum/#!forum/numericalhaskell 63 | 64 | 6. Visual functional block-based programming language for CodeWorld 65 | 66 | This work went well and is described on the student’s blog. It is usable 67 | today at https://code.world/blocks and apparently has already begun to be 68 | integrated into CodeWorld lesson plans. 69 | 70 | - http://stefanj.me/funblocks/ 71 | - https://code.world/blocks 72 | 73 | 7. Jupyter for GHCJS 74 | 75 | Apparently this ran into a far amount of difficulties and didn’t make 76 | significant progress, though not for lack of effort. The student is 77 | anticipated to write up an experience report describing some of the problems 78 | encountered and how others might work around them in the future. 79 | 80 | 8. Live Profiling and Performance Monitoring Server 81 | 82 | A lot of work was accomplished on various fronts here. A number of 83 | changes to the GHC RTS are in review and pending merge. A tool has 84 | been written to take advantage of the newly available information. And 85 | various other small packages that met needs along the way were 86 | extracted and contributed to hackage. A fuller write-up of progress 87 | and future work is available at the student’s blog. 88 | 89 | - https://phabricator.haskell.org/D2522 90 | - https://github.com/NCrashed/live-profile-monitor 91 | - http://ncrashed.github.io/blog/posts/2016-09-11-hsoc-results.html 92 | 93 | * * * 94 | 95 | Apologies for the delays in assembling this information -- as they say, man 96 | plans, the fates laugh. 97 | 98 | Thanks to all our students for their dedicated work and contributions to the 99 | ecosystem. We hope to see much more from all of you in the future. And thanks to 100 | all our mentors for donating their time to guide, teach, and make this possible. 101 | 102 | And a very special thanks to Edward Kmett for co-ordinating much of the 103 | administrative work here, as well as fundraising towards this great Summer of 104 | Haskell. 105 | 106 | * * * 107 | 108 | Sponsors (listed on summer.haskell.org): 109 | 110 | - haskell.org kicked things off this year by funding a student and 111 | organizing the Summer of Haskell. 112 | 113 | - Awake Networks is building a next generation network security and 114 | analytics platform. They are a proud sponsor of the Summer of Haskell 115 | and contribute broadly to the Haskell community. 116 | 117 | - Haskell Book is a proud sponsor of the Summer of Haskell and 118 | provides a complete and up-to-date resource for learning Haskell, 119 | suitable whether you're completely new to Haskell or are at an 120 | intermediate level and want to deepen your understanding. 121 | 122 | - YOW! Australia is a proud sponsor of the Summer of Haskell and 123 | organizes conferences throughout Australia. 124 | 125 | - Chris Smith volunteered to fund two students to work on CodeWorld in 126 | particular. 127 | 128 | - Edward Kmett and Gershom Bazerman volunteered to personally fund a 129 | student project. 130 | 131 | Best, 132 | Gershom Bazerman 133 | Haskell.org Committee 134 | -------------------------------------------------------------------------------- /content/news/2017-02-28-2017-announce.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Summer of Haskell 2017 Announcement' 3 | author: 'Niki Vazou & Jasper Van der Jeugt' 4 | --- 5 | 6 | Dear Haskellers, 7 | 8 | We are sorry to announce that this year Haskell.org was 9 | not accepted for the 2017 Google Summer of Code. But, as last year, we plan to 10 | organize our own Summer of Haskell! 11 | 12 | We ask for your help to plan a successful Summer of Haskell 2017. As last year, 13 | one student will be funded directly out of Haskell.org 14 | general funds. The key factor in how many further students we can fund is the 15 | generosity and support of donors. Funding a single student plus overhead costs 16 | 6000 USD. We are looking for donors willing to cover half, one or more students. 17 | If you (or your organization) are interested in becoming a Summer of Haskell 18 | donor please reach out to committee at haskell.org. We also encourage you to 19 | make a smaller donation, as if we receive enough of small donations in total, we 20 | will combine them to fund more students. 21 | 22 | Donation information is at: 23 | 24 | 25 | 26 | More information will be forthcoming as we work out the details. 27 | 28 | Feel free to contact us at (nvazou at cs.umd.edu and m at jaspervdj.be) if want 29 | to help or if you have any ideas, questions, or concerns. 30 | 31 | Best, 32 | 33 | Niki Vazou & Jasper Van der Jeugt 34 | for the Haskell.org Committee 35 | -------------------------------------------------------------------------------- /content/news/2017-04-05-getting-ready.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Getting ready for Summer of Haskell 2017' 3 | author: 'Niki Vazou & Jasper Van der Jeugt' 4 | --- 5 | 6 | We are happy to announce that Summer of Haskell 2017 will host at least 8 7 | students, funded from the Haskell community and corporate sponsors. 8 | 9 | You can find all information (including the timeline) at the Summer of Haskell 10 | new webpage: 11 | 12 | 13 | 14 | Students can submit applications from April 25th until the May 6th. We recommend 15 | that interested students start thinking about their proposals and brainstorm 16 | with potential mentors. In case you would like to participate as a student but 17 | you have no idea what to work on, we have a page dedicated to ideas here: 18 | 19 | 20 | 21 | Teachers of FP courses at universities around the world are strongly encouraged 22 | to share this announcement with their students. 23 | 24 | Mentors, as well as everyone from the community, is encouraged to contribute 25 | ideas by sending pull requests to the Summer of Haskell repository (or 26 | contacting us): 27 | 28 | 29 | 30 | Sponsors are still welcome, as we can add more slots if the necessary funds 31 | become available. Combining our current individual donations with partial 32 | sponsors, we only need $2000 more to fund an additional student. Please consider 33 | making a small donation towards that goal. If you would like to contribute do 34 | not hesitate to contact us or donate directly: 35 | 36 | 37 | 38 | We’d like to thank our current sponsors for making this Summer of Haskell 39 | possible: 40 | 41 | - [haskell.org](http://haskell.org) kicked things off this year by funding a 42 | student and organizing the Summer of Haskell 2017 after a successful [Summer 43 | of Haskell 2016](https://mail.haskell.org/pipermail/haskell-cafe/2016-December/125702.html). 44 | 45 | - [Asahi Net](https://asahi-net.jp/en/) is a Japanese Internet service provider that 46 | has been running stable systems for over 25 years. They are a proud sponsor 47 | of the Summer of Haskell, and contribute to the Japanese Haskell community. 48 | 49 | - [Awake Networks](http://www.awakenetworks.com/) is building a next generation 50 | network security and analytics platform. They are a proud sponsor of the 51 | Summer of Haskell and contribute broadly to the Haskell community. 52 | 53 | - [CodeWorld](http://code.world/) is an educational project that blends 54 | mathematics and Haskell programming into a visual playground. Chris Smith has 55 | volunteered to fund two students to work on CodeWorld in particular. 56 | 57 | - [Facebook](http://facebook.com/) uses Haskell in its [anti-abuse 58 | infrastructure](https://code.facebook.com/posts/745068642270222/fighting-spam-with-haskell/), 59 | and as part of that effort we open-sourced the 60 | [Haxl](https://github.com/facebook/Haxl) framework which is being used at 61 | scale in production to automatically parallelise data-fetching code. We're 62 | delighted to be able to support the Haskell community's efforts by sponsoring 63 | a student for this year's Summer of Haskell. 64 | 65 | - [Fugue Inc.](http://fugue.co/) radically simplifies cloud operations with its 66 | software-defined system for dynamically orchestrating and enforcing cloud 67 | infrastructure at scale. Fugue uses Haskell in its product and is proud to 68 | sponsor a student to improve the ecosystem. 69 | 70 | - [Galois](http://galois.com/) applies cutting-edge computer science and applied 71 | mathematics to solve difficult technological problems, delivering practical 72 | solutions tailored to our clients’ needs. Haskell and other functional 73 | programming languages are key tools we use in providing these solutions. 74 | 75 | - [Tweag I/O](http://tweag.io) is a network of software innovation labs across 76 | Europe. We develop novel solutions and products for our clients around the 77 | world. Haskell is key to delivering fast, correct and maintainable code. We 78 | have shipped Haskell in anything from tiny web services to large 79 | high-performance compute clusters with custom hardware. We're particularly 80 | keen to help the community grow Haskell into the strongest systems programming 81 | language and ecosystem out there. We're very proud to sponsor a student this 82 | summer to help make it happen. 83 | 84 | - Finally, Davean has volunteered to fund a student expressly to work on the 85 | [Hadrian build system for GHC](/ideas.html#hadrian-ghc). 86 | 87 | Feel free to contact us at (nvazou at cs.umd.edu and m at jaspervdj.be) if want 88 | to help or if you have any ideas, questions, or concerns. 89 | 90 | Best, 91 | Niki Vazou & Jasper Van der Jeugt 92 | for the Haskell.org Committee 93 | -------------------------------------------------------------------------------- /content/news/2017-04-25-student-applications-open.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Student Applications are now open' 3 | author: 'Niki Vazou & Jasper Van der Jeugt' 4 | --- 5 | 6 | Hey all, 7 | 8 | We are now happy to announce that we have opened student applications for Summer 9 | of Haskell 2017. You can apply at: 10 | 11 | 12 | 13 | The application period is open until the 6th of May, so that should give you 14 | plenty of time. 15 | 16 | At this time, we are also actively seeking mentors. In case you would like to 17 | mentor a project, please let us know: 18 | 19 | 20 | 21 | Thanks to the generous donations of our sponsors, we will be able to sponsor 22 | around 10 students this year (depending on the applications we receive). 23 | 24 | Our sponsors are: 25 | 26 | - [haskell.org](http://haskell.org) kicked things off this year by funding a 27 | student and organizing the Summer of Haskell 2017 after a successful 28 | [Summer of Haskell 2016](https://mail.haskell.org/pipermail/haskell-cafe/2016-December/125702.html). 29 | 30 | - [Asahi Net](https://asahi-net.jp/en/) is a Japanese Internet service provider 31 | that has been running stable systems for over 25 years. They are a proud 32 | sponsor of the Summer of Haskell, and contribute to the Japanese Haskell 33 | community. 34 | 35 | - [Awake Networks](http://www.awakenetworks.com/) is building a next generation 36 | network security and analytics platform. They are a proud sponsor of the 37 | Summer of Haskell and contribute broadly to the Haskell community. 38 | 39 | - [CodeWorld](http://code.world/) is an educational project that blends 40 | mathematics and Haskell programming into a visual playground. Chris Smith has 41 | volunteered to fund two students to work on CodeWorld in particular. 42 | 43 | - [Digital Asset](http://digitalasset.com/) provides Distributed Ledger 44 | solutions for financial institutions globally. They have developed a pure, 45 | typed, functional, domain specific language for writing contracts, called 46 | DAML. They are a proud sponsor of the Summer of Haskell and contribute 47 | broadly to the Haskell community. 48 | 49 | - [Facebook](http://facebook.com/) uses Haskell in its [anti-abuse 50 | infrastructure](https://code.facebook.com/posts/745068642270222/fighting-spam-with-haskell/), 51 | and as part of that effort we open-sourced the 52 | [Haxl](https://github.com/facebook/Haxl) framework which is being used at 53 | scale in production to automatically parallelise data-fetching code. We're 54 | delighted to be able to support the Haskell community's efforts by sponsoring 55 | a student for this year's Summer of Haskell. 56 | 57 | - [Fugue Inc.](http://fugue.co/) radically simplifies cloud operations with its 58 | software-defined system for dynamically orchestrating and enforcing cloud 59 | infrastructure at scale. Fugue uses Haskell in its product and is proud to 60 | sponsor a student to improve the ecosystem. 61 | 62 | - [Galois](http://galois.com/) applies cutting-edge computer science and applied 63 | mathematics to solve difficult technological problems, delivering practical 64 | solutions tailored to our clients’ needs. Haskell and other functional 65 | programming languages are key tools we use in providing these solutions. 66 | 67 | - [IOHK](https://iohk.io/) is a technology company committed to using 68 | peer-to-peer technologies to provide financial services to the three billion 69 | people who don't have them. We implement our first-principles cryptographic 70 | research in Haskell and we are committed to the development of the Haskell 71 | ecosystem. 72 | 73 | - [Tweag I/O](http://tweag.io) is a network of software innovation labs across 74 | Europe. We develop novel solutions and products for our clients around the 75 | world. Haskell is key to delivering fast, correct and maintainable code. We 76 | have shipped Haskell in anything from tiny web services to large 77 | high-performance compute clusters with custom hardware. We're particularly 78 | keen to help the community grow Haskell into the strongest systems programming 79 | language and ecosystem out there. We're very proud to sponsor a student this 80 | summer to help make it happen. 81 | 82 | - Davean has volunteered to fund a student expressly to work on the 83 | [Hadrian build system for GHC](/ideas.html#hadrian-ghc). 84 | -------------------------------------------------------------------------------- /content/news/2017-05-24-accepted-projects.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Accepted projects for 2017' 3 | author: 'Niki Vazou & Jasper Van der Jeugt' 4 | --- 5 | 6 | Hey all, 7 | 8 | We are happy to announce the 15 projects accepted for Summer of Haskell 2017 and 9 | that the community bonding period has begun. 10 | 11 | If there are people who would like to co-mentor a project, please let us know. 12 | 13 | # Haskell.org projects 14 | 15 | 1. Safe streaming with linear types 16 | Student: Edvard Hübinette 17 | Mentor: Arnaud Spiwack 18 | Blog: 19 | 20 | 2. Bringing Sanity to the GHC Performance Test-Suite 21 | Student: Jared Weakly 22 | Mentor: Ben Gamari 23 | Blog: 24 | 25 | 3. Haskell IDE Engine 26 | Student: Zubin Duggal 27 | Mentor: Alan Zimmerman 28 | 29 | 4. Last Mile for cabal new-build 30 | Student: Francesco Gazzetta 31 | Mentor: Daniel Wagner 32 | 33 | 5. Totality checking base with Liquid Haskell 34 | Student: Sean Leffler 35 | Mentor: Niki Vazou 36 | Co-mentor: Eric Seidel 37 | 38 | 6. Modularizing haskell-mode and improving haskell-interactive-mode 39 | Student: Vasantha Ganesh Kanniappan 40 | Mentor: Gracjan Polak 41 | 42 | 7. Haskey (an embedded key-value store modeled after LMDB) 43 | Student: Henri Verroken 44 | Mentor: Steven Keuchel 45 | Co-mentor: George Karachalias 46 | 47 | 8. Improve the Shake-Based Hadrian Build System for GHC 48 | Student: Zhen Zhang 49 | Mentor: Andrey Mokhov 50 | 51 | 9. GHC Performance improvements 52 | Student: Igor Popov 53 | Mentor: Jose Calderon 54 | 55 | 10. Improvement of Hackage Matrix Builder 56 | Student: Andika Demas Riyandi 57 | Mentor: Herbert Valerio Riedel 58 | 59 | 11. WebGHC (a WebAssembly backend for GHC) 60 | Student: Michael Vogelsang 61 | Mentor: Will Fancher 62 | 63 | # code.world projects 64 | 65 | 12. Better collaborative coding features for CodeWorld 66 | Student: Parv Mor 67 | Co-mentor: Michael Chavinda 68 | Co-mentor: Anthony Green 69 | 70 | 13. Improvements to parsing, compiling, and errors for CodeWorld 71 | Student: Pranjal Tale 72 | Primary Mentor: Kyle Butt 73 | Secondary Mentor: Chris Smith 74 | 75 | 14. Exporting and sharing CodeWorld projects 76 | Student: Venkatraman Srikanth 77 | Primary Mentor: Theo Belaire 78 | Secondary Mentor: Han Wang 79 | 80 | 15. Improve editor tooling for CodeWorld 81 | Student: Eric Roberts 82 | Primary Mentor: Emin Karayel 83 | Secondary Mentor: Fernando Alegre 84 | 85 | We would like to thank all students who applied for the quality proposals. We 86 | received 68 so selecting the projects was extremely difficult. Yet, three new 87 | positions opened during selection period to accept high quality applications. 88 | 89 | Summer of Haskell 2017 is made possible by our generous sponsors: 90 | 91 | - [haskell.org](http://haskell.org) kicked things off this year by funding a 92 | student and organizing the Summer of Haskell 2017 after a successful 93 | [Summer of Haskell 2016](https://mail.haskell.org/pipermail/haskell-cafe/2016-December/125702.html). 94 | 95 | - [Asahi Net](https://asahi-net.jp/en/) is a Japanese Internet service provider that 96 | has been running stable systems for over 25 years. They are a proud sponsor of 97 | the Summer of Haskell, and contribute to the Japanese Haskell community. 98 | 99 | - [Awake Networks](http://www.awakenetworks.com/) is building a next generation 100 | network security and analytics platform. They are a proud sponsor of the Summer 101 | of Haskell and contribute broadly to the Haskell community. 102 | 103 | - [CodeWorld](http://code.world/) is an educational project that blends 104 | mathematics and Haskell programming into a visual playground. Chris Smith has 105 | volunteered to fund two students to work on CodeWorld in particular. 106 | 107 | - [Digital Asset](http://digitalasset.com/) provides Distributed Ledger solutions 108 | for financial institutions globally. They have developed a pure, typed, 109 | functional, domain specific language for writing contracts, called DAML. They 110 | are a proud sponsor of the Summer of Haskell and contribute broadly to the 111 | Haskell community. 112 | 113 | - [Facebook](http://facebook.com/) uses Haskell in its 114 | [anti-abuse infrastructure](https://code.facebook.com/posts/745068642270222/fighting-spam-with-haskell/), 115 | and as part of that effort we open-sourced the 116 | [Haxl](https://github.com/facebook/Haxl) framework which is being used at scale 117 | in production to automatically parallelise data-fetching code. We're delighted 118 | to be able to support the Haskell community's efforts by sponsoring a student 119 | for this year's Summer of Haskell. 120 | 121 | - [Fugue Inc.](http://fugue.co/) radically simplifies cloud operations with its 122 | software-defined system for dynamically orchestrating and enforcing cloud 123 | infrastructure at scale. Fugue uses Haskell in its product and is proud to 124 | sponsor a student to improve the ecosystem. 125 | 126 | - [Galois](http://galois.com/) applies cutting-edge computer science and applied 127 | mathematics to solve difficult technological problems, delivering practical 128 | solutions tailored to our clients’ needs. Haskell and other functional 129 | programming languages are key tools we use in providing these solutions. 130 | 131 | - [IOHK](https://iohk.io/) is a technology company committed to using 132 | peer-to-peer technologies to provide financial services to the three billion 133 | people who don't have them. We implement our first-principles cryptographic 134 | research in Haskell and we are committed to the development of the Haskell 135 | ecosystem. 136 | 137 | - [Tweag I/O](http://tweag.io) is a network of software innovation labs across 138 | Europe. We develop novel solutions and products for our clients around the 139 | world. Haskell is key to delivering fast, correct and maintainable code. We 140 | have shipped Haskell in anything from tiny web services to large 141 | high-performance compute clusters with custom hardware. We're particularly 142 | keen to help the community grow Haskell into the strongest systems programming 143 | language and ecosystem out there. We're very proud to sponsor a student this 144 | summer to help make it happen. 145 | 146 | Davean has volunteered to fund a student expressly to work on the [Hadrian build 147 | system for GHC](/ideas.html#hadrian-ghc). Steven Keuchel has provided funds for 148 | a student to work on Haskey. 149 | -------------------------------------------------------------------------------- /content/news/2017-08-04-midterm-update.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Midterm update for 2017' 3 | author: 'Niki Vazou & Jasper Van der Jeugt' 4 | --- 5 | 6 | Hey all, 7 | 8 | We'd like to update the wider Haskell community on the state of the Summer of 9 | Haskell projects, now that the midterm evaluation has passed. We are very happy 10 | that almost everyone passed the evaluation. 11 | 12 | Although several of the students maintain blogs on their own (which we 13 | definitely encourage), we also made an attempt to compile the information here. 14 | 15 | 1. Safe streaming with linear types 16 | Student: Edvard Hübinette 17 | Mentor: Arnaud Spiwack 18 | Blog: 19 | 20 | The majority of the streaming library internals and prelude is converted for 21 | leveraging linear types and uses a linear monad class to ensure that old 22 | stream states cannot be accessed again, effectively eliminating the issue 23 | with arbitrarily weird behaviour arising from duplicated effects. 24 | 25 | The student has also found some very tricky usability issues that arise from 26 | forcing linear consumption, which will be documented in an upcoming blog 27 | post. 28 | 29 | Other than that the student is working on implementing linear versions of 30 | other monads like State, and trying to figure out how to instance LMonad IO, 31 | which seems somewhat tricky. 32 | 33 | 2. Bringing Sanity to the GHC Performance Test-Suite 34 | Student: Jared Weakly 35 | Mentor: Ben Gamari 36 | Blog: 37 | 38 | The creation of the tooling, writing the functionality, and all of the 39 | necessary supporting elements of the project are seemingly done. 40 | 41 | What remains at this point is to start actually wiring things together in a 42 | mock-up and then finally in production. Along the way, any missing 43 | functionality will be added, helping tools to streamline things will also be 44 | added, and so on. 45 | 46 | 3. Haskell IDE Engine 47 | Student: Zubin Duggal 48 | Mentor: Alan Zimmerman 49 | 50 | HIE with the vscode plugin is now in a useable 51 | state and implements a large portion of the [Language Server 52 | Protocol](https://github.com/Microsoft/language-server-protocol). 53 | 54 | More details can be found here: 55 | . 56 | 57 | 4. Last Mile for cabal new-build 58 | Student: Francesco Gazzetta 59 | Mentor: Daniel Wagner 60 | 61 | Almost all the basic new-build commands are implemented, and the student is 62 | working on `new-exec` now. A bunch of bugs have been fixed (e.g. datafiles 63 | for inplace builds). After `new-exec`, the student will work on the 64 | much-needed `new-install`, which will probably take most of the remaining 65 | time (see the design concept, `#4558`). The progress is tracked here: 66 | . 67 | 68 | 5. Totality checking base with Liquid Haskell 69 | Student: Sean Leffler 70 | Mentor: Niki Vazou 71 | Co-mentor: Eric Seidel 72 | 73 | So far, the student has identified multiple minor bugs and one major bug in 74 | Liquid Haskell. 75 | 76 | While the student hasn't made great progress on actually verifying base, the 77 | project is turning into a research project after and a number of interesting 78 | ways have been identified in the ways that Liquid Haskell interacts with the 79 | particular style of code used in base - especially Haskell's laziness. 80 | 81 | 6. Modularizing haskell-mode and improving haskell-interactive-mode 82 | Student: Vasantha Ganesh Kanniappan 83 | Mentor: Gracjan Polak 84 | 85 | Status of the project: Comint based Major mode for ghci repl (Inf-haskell) 86 | is being improved. The student is in the middle of a number of things: 87 | converting the interactive-haskell-mode, the minor-mode that can be used 88 | along with haskell-mode for getting completion-at-point-functions, `M-.`, 89 | loading module to interpreter, getting type of function at point and other 90 | features to depend on the comint based process instead of the old 91 | haskell-interactive-mode. 92 | 93 | More information can be found in this blogpost: 94 | . 95 | 96 | 7. Haskey (an embedded key-value store modeled after LMDB) 97 | Student: Henri Verroken 98 | Mentor: Steven Keuchel 99 | Co-mentor: George Karachalias 100 | 101 | The following things have been finished: 102 | 103 | - The pure B+tree implementation. 104 | - The impure B+tree implementation, which abstracts over an page allocation 105 | back-end. 106 | - An append-only page allocator, a page-reusing allocator, and a concurrent 107 | page allocator (allowing for concurrent readers and serialized writers), 108 | which we are currently heavily testing. 109 | - Transaction support. 110 | - An on-disk and in-memory storage engine. 111 | 112 | Currently missing for our MVP (and publishing of the key-value store) are 113 | overflow pages to store large values and an efficient binary serialization. 114 | 115 | 8. Improve the Shake-Based Hadrian Build System for GHC 116 | Student: Zhen Zhang 117 | Mentor: Andrey Mokhov 118 | 119 | 28 PRs have been merged up to now, and two out of three major goals (dynamic 120 | way support and installation rule) are implemented and tested on Linux and 121 | OS X platforms. 122 | 123 | Another major goal, cross-compilation support, is also being investigated 124 | in-depth. Besides the coding part, 29 issues have been submitted, and 125 | project board has been set up. A nightly build system & tracker, called 126 | Hadrian's Wall, is launched as well. Our team will also talk about Hadrian 127 | in this year’s HIW at ICFP. 128 | 129 | 9. GHC Performance improvements 130 | Student: Igor Popov 131 | Mentor: Jose Calderon 132 | 133 | Unfortunately, the student did not pass the midterm evaluation for this 134 | perhaps too ambitious project. 135 | 136 | 10. Improvement of Hackage Matrix Builder 137 | Student: Andika Demas Riyandi 138 | Mentor: Herbert Valerio Riedel 139 | 140 | The migration of the site's frontend to Purescript has been completed and 141 | soon be deployed. 142 | 143 | Before adding new feature, the API will be upgraded to use 144 | servant-purescript so frontend and backend communication will be conducted 145 | smoothly. The next features that are planned are extending the UI to allow 146 | accessing previous historic reports that are in the database and the 147 | ability to traverse package dependency graphs. 148 | 149 | 11. WebGHC (a WebAssembly backend for GHC) 150 | Student: Michael Vogelsang 151 | Mentor: Will Fancher 152 | 153 | As it stands, WebGHC has solid foundations for building libc, compiler-rt, 154 | and ncurses to WebAssembly encoded via nix. It is possible to use the work 155 | to easily compile C code to working WebAssembly. The studnet and mentor are 156 | optimistic that they will be able to have something usable by the end of the 157 | work term. 158 | 159 | We are very happy with the progress of the students so far and we hope that 160 | they continue to work diligently towards the final evaluation. 161 | 162 | Summer of Haskell 2017 is made possible by our generous sponsors: 163 | 164 | - [haskell.org](http://haskell.org) kicked things off this year by funding a 165 | student and organizing the Summer of Haskell 2017 after a successful 166 | [Summer of Haskell 2016](https://mail.haskell.org/pipermail/haskell-cafe/2016-December/125702.html). 167 | 168 | - [Asahi Net](https://asahi-net.jp/en/) is a Japanese Internet service provider that 169 | has been running stable systems for over 25 years. They are a proud sponsor of 170 | the Summer of Haskell, and contribute to the Japanese Haskell community. 171 | 172 | - [Awake Networks](http://www.awakenetworks.com/) is building a next generation 173 | network security and analytics platform. They are a proud sponsor of the Summer 174 | of Haskell and contribute broadly to the Haskell community. 175 | 176 | - [CodeWorld](http://code.world/) is an educational project that blends 177 | mathematics and Haskell programming into a visual playground. Chris Smith has 178 | volunteered to fund two students to work on CodeWorld in particular. 179 | 180 | - [Digital Asset](http://digitalasset.com/) provides Distributed Ledger solutions 181 | for financial institutions globally. They have developed a pure, typed, 182 | functional, domain specific language for writing contracts, called DAML. They 183 | are a proud sponsor of the Summer of Haskell and contribute broadly to the 184 | Haskell community. 185 | 186 | - [Facebook](http://facebook.com/) uses Haskell in its 187 | [anti-abuse infrastructure](https://code.facebook.com/posts/745068642270222/fighting-spam-with-haskell/), 188 | and as part of that effort we open-sourced the 189 | [Haxl](https://github.com/facebook/Haxl) framework which is being used at scale 190 | in production to automatically parallelise data-fetching code. We're delighted 191 | to be able to support the Haskell community's efforts by sponsoring a student 192 | for this year's Summer of Haskell. 193 | 194 | - [Fugue Inc.](http://fugue.co/) radically simplifies cloud operations with its 195 | software-defined system for dynamically orchestrating and enforcing cloud 196 | infrastructure at scale. Fugue uses Haskell in its product and is proud to 197 | sponsor a student to improve the ecosystem. 198 | 199 | - [Galois](http://galois.com/) applies cutting-edge computer science and applied 200 | mathematics to solve difficult technological problems, delivering practical 201 | solutions tailored to our clients’ needs. Haskell and other functional 202 | programming languages are key tools we use in providing these solutions. 203 | 204 | - [IOHK](https://iohk.io/) is a technology company committed to using 205 | peer-to-peer technologies to provide financial services to the three billion 206 | people who don't have them. We implement our first-principles cryptographic 207 | research in Haskell and we are committed to the development of the Haskell 208 | ecosystem. 209 | 210 | - [Tweag I/O](http://tweag.io) is a network of software innovation labs across 211 | Europe. We develop novel solutions and products for our clients around the 212 | world. Haskell is key to delivering fast, correct and maintainable code. We 213 | have shipped Haskell in anything from tiny web services to large 214 | high-performance compute clusters with custom hardware. We're particularly 215 | keen to help the community grow Haskell into the strongest systems programming 216 | language and ecosystem out there. We're very proud to sponsor a student this 217 | summer to help make it happen. 218 | 219 | Davean has volunteered to fund a student expressly to work on the [Hadrian build 220 | system for GHC](/ideas.html#hadrian-ghc). Steven Keuchel has provided funds for 221 | a student to work on Haskey. 222 | -------------------------------------------------------------------------------- /content/news/2017-09-15-final-results.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Final results for 2017' 3 | author: 'Niki Vazou & Jasper Van der Jeugt' 4 | --- 5 | 6 | Hey all, 7 | 8 | The Summer of Haskell 2017 is officially over! 9 | 10 | We want to thank the students, mentors and sponsors for the great and productive 11 | summer. 12 | 13 | Before, getting into the details of the past summer, we'd like to mention that 14 | we will start preparation for the next Summer of Haskell soon. For that 15 | purpose, we will be looking for: 16 | 17 | - *Project ideas*: this is very important and would allow us to obtain funding 18 | from Google again (the lack of a proper idea page is one of the main reasons 19 | we were not accepted into GSoC 2017). For ideas, you can issue a PR against 20 | [this repo](https://github.com/haskell-org/summer-of-haskell) or just shoot us 21 | an email. 22 | - *Mentors*: if you are interested in mentoring a student throughout the summer, 23 | feel free to contact us, you don't need to have a specific project in mind. 24 | We would like to assign back-up mentors to each project next year. 25 | - *Students*: it's never to early to start learning Haskell and looking for 26 | interesting projects! :-) 27 | - *Sponsors*: it goes without saying that this program would not be possible 28 | without our sponsors. 29 | 30 | Please reach out to us (`m@jaspervdj.be` & `nvazou@cs.umd.edu`) if you are 31 | interested in any of the above! 32 | 33 | Now, let's talk about the past summer. We are extremely pleased that many 34 | students were able to complete their projects successfully. Other students were 35 | not able to meet the goals they set initially, but despite that the students 36 | were still able to make valuable and impressive contributions to both the 37 | projects and the ecosystem as a whole. 38 | 39 | Additionally, it seems like some students are very interested in continuing to 40 | contribute to the Haskell open-source community, which we of course gladly 41 | [encourage]! 42 | 43 | [encourage]: http://fgaz.me/posts/2017-09-13-hsoc-cabal-new-build-status-update-1/#fn:bait 44 | 45 | Here is what the students said about their Summer of Haskell 2017 projects: 46 | 47 | 1. Safe streaming with linear types 48 | Student: Edvard Hübinette 49 | Mentor: Arnaud Spiwack 50 | 51 | This student successfully completed the project. 52 | 53 | > The unsafety that arose from implicitly repeated effects when accessing 54 | > old stream states was resolved neatly by making the streams linear. To 55 | > make this possible, linear counterparts of the functor/applicative/monad 56 | > stack was developed. A major discovery of the project was that the price 57 | > we paid for safe streams is the absence of take-like operations; an 58 | > important part of the programming model. 59 | > 60 | > Since this project requires a pre-alpha version of the GHC compiler, the 61 | > main focus after the safety issues were resolved shifted to communication 62 | > and documentation of the experience of developing with linear type 63 | > systems; indeed a very interesting experience! Through this opportunity I 64 | > have learned an incredible lot, gotten in touch with fantastic people in 65 | > the industry, and gotten the opportunity to share my findings with an 66 | > interested community; all of which have been awesome. 67 | 68 | For more information, see: 69 | . 70 | 71 | 2. Bringing Sanity to the GHC Performance Test-Suite 72 | Student: Jared Weakly 73 | Mentor: Ben Gamari 74 | 75 | This student successful completed the project. 76 | 77 | > The experience was great! I learned a lot about doing real work on real 78 | > code (y'know, the old creaky code of nightmares where you can't just start 79 | > over "the right way" like you do in school projects). My blog 80 | > goes over a lot more detail than I can provide 81 | > here but it's safe to say that I loved this first experience of giving 82 | > back to the Haskell community which has helped me out so much and given me 83 | > a language I deeply enjoy. 84 | 85 | For more information, see: 86 | . 87 | 88 | 3. Haskell IDE Engine 89 | Student: Zubin Duggal 90 | Mentor: Alan Zimmerman 91 | Status: Completed 92 | Link: 93 | 94 | This student successfully completed the project. 95 | 96 | > I had a lot of fun working on this HSOC. I got the chance to work on 97 | > trying to fix a key issue in the Haskell ecosystem - editor integration 98 | > and IDE-like functionality. HIE is now starting to be used in the wild, 99 | > and it feels good to work on something useful to other people. This also 100 | > wouldn't have been possible without the guidance of my mentor, Alan 101 | > Zimmerman. 102 | 103 | 4. Last Mile for cabal new-build 104 | Student: Francesco Gazzetta 105 | Mentor: Daniel Wagner 106 | 107 | This student partially completed the project. 108 | 109 | > Working on an open source project so widely used by the community was 110 | > amazing! 111 | > Here's a brief summary of what has been done: 112 | > 113 | > * new-build and new-test were already done when I started 114 | > * new-run 115 | > * same functionality as old-run, plus new-build target syntax 116 | > * also makes data-files work in new-build projects 117 | > * new-bench 118 | > * new-exec (is in the process of being merged) 119 | > * new-install (part of it, which includes the 120 | > `cabal new-install some-hackage-package` usecase. I'm currently 121 | > polishing it) 122 | 123 | For more information, see: 124 | . 125 | 126 | 5. Totality checking base with Liquid Haskell 127 | Student: Sean Leffler 128 | Mentor: Niki Vazou 129 | Co-mentor: Eric Seidel 130 | 131 | This student partially completed the project. 132 | 133 | > I found working with Liquid Haskell to be simple and mostly intuitive! No 134 | > bugs in the standard library were found in the course of the project 135 | > (although what I did manage to verify was a tiny fraction of what I would 136 | > have liked to.) We did, however, find several minor bugs and one major bug 137 | > in Liquid Haskell, and I learned a lot about the inner workings of Liquid 138 | > Haskell. I was personally fascinated by the limits of Liquid with respect 139 | > to sometimes being unable to automatically inductively reason about 140 | > datatypes (e.g. the inability to infer that a list of uninhabited types 141 | > cannot be nonempty.) In any case, this project has firmly reassured me in 142 | > my belief that few projects have any excuse not to Liquify their Haskell. 143 | 144 | The student's progress can be found in this repository: 145 | . 146 | 147 | 6. Modularizing haskell-mode and improving haskell-interactive-mode 148 | Student: Vasantha Ganesh Kanniappan 149 | Mentor: Gracjan Polak 150 | 151 | This student partially completed the project. 152 | 153 | > We were able to retain almost all of the features and simultaneously 154 | > reduce more than 4000 lines of code. We were able to merge parts of that 155 | > change, but the most important PR is controversial and might not get 156 | > merged. This is because of the removal of a feature that supports the 157 | > ability to use more than one session of inferior haskell process per Emacs 158 | > process. Although with the new change, people can create a new Emacs 159 | > process to use a new session, many people are not happy about it. 160 | 161 | For more information, see: 162 | . 163 | 164 | 7. Haskey (an embedded key-value store modeled after LMDB) 165 | Student: Henri Verroken 166 | Mentor: Steven Keuchel 167 | Co-mentor: George Karachalias 168 | 169 | This student successfully completed the project. 170 | 171 | > It was a great opportunity to be a part of the Summer of Haskell project. 172 | > It was challenging, but extremely interesting. I learned a lot, not only 173 | > about database internals, but also on advanced Haskell concepts as well. I 174 | > got a lot of advice and guidance from my mentor, which really helped me 175 | > out. Short, I loved working on Haskey this past summer. 176 | 177 | For more information, see: 178 | . 179 | 180 | 8. Improve the Shake-Based Hadrian Build System for GHC 181 | Student: Zhen Zhang 182 | Mentor: Andrey Mokhov 183 | 184 | This student successfully completed the project. 185 | 186 | > The experience is very nice. The mentor Andrey was very patient and 187 | > supportive. Although hacking on a build system might not always be super 188 | > productive, and things are broken by the upstream GHC updates often, we 189 | > understand the situation and work together to solve the more prioritized 190 | > issues. From what we have achieved in the summer (my work includes all 191 | > three milestones, including dynamic way, install rule, and cross 192 | > compilation), I think Hadrian project has reached the stage where we can 193 | > seriously talking about being merged into the GHC. It is very exciting. 194 | 195 | For more information, see: 196 | . 197 | 198 | 9. GHC Performance improvements 199 | Student: Igor Popov 200 | Mentor: Jose Calderon 201 | 202 | Unfortunately, the student did not pass the midterm evaluation for this 203 | perhaps too ambitious project. 204 | 205 | 10. Improvement of Hackage Matrix Builder 206 | Student: Andika Demas Riyandi 207 | Mentor: Herbert Valerio Riedel 208 | 209 | This student partially completed the project. 210 | 211 | > Being able to participate in the HSOC and having great mentor is more than 212 | > enough for student to learn functional programming (especially Haskell). 213 | > During my time working on the project, I have learned so many things and 214 | > found great community (both Purescript and Haskell community) to discuss 215 | > whenever my mentor is not available. 216 | 217 | For more information, see: 218 | . 219 | 220 | 11. WebGHC (a WebAssembly backend for GHC) 221 | Student: Michael Vogelsang 222 | Mentor: Will Fancher 223 | 224 | This student partially completed the project. 225 | 226 | > I was immensely glad WebGHC was accepted into the program, and thankful to 227 | > be partnered with an extremely knowledgeable and helpful mentor. This 228 | > project sits at an interesting crossroads of compilation toolchains, web 229 | > technology, and functional programming. Over the course of the summer we 230 | > had deal with issues originating from GHC's buildsystem and LLVM backend, 231 | > LLVM/Clang itself, WebAssembly proper, individual browser behavior, and 232 | > more. 233 | > 234 | > Needless to say, I gained a lot of knowledge about a wide variety of 235 | > subjects over the course of the summer, and when I needed help I was often 236 | > able to turn to the Haskell or LLVM community. I was surprised to find 237 | > out firsthand just how quickly the GHC and LLVM dev teams respond to bug 238 | > submissions with meaningful and helpful feedback while managing such big 239 | > projects. 240 | > 241 | > I'm grateful for the role the Summer of Haskell has played in getting this 242 | > project off the ground and I plan to continue working on this project in 243 | > the long term. Sometime in the near future, I expect WebGHC to be 244 | > producing production-ready, performant code for the Web. 245 | 246 | For more information, see: 247 | . 248 | 249 | code.world projects 250 | -------------------- 251 | 252 | 12. Better collaborative coding features for CodeWorld 253 | Student: Parv Mor 254 | Co-mentor: Michael Chavinda 255 | Co-mentor: Anthony Green 256 | 257 | This student successfully completed the project. 258 | 259 | > Summer of Haskell was one of the greatest experience towards functional 260 | > programming and taught me a great lot of things. During the work period I 261 | > introduced several new features (like a new file system, ability to 262 | > comment over projects, ability to work on the same project together i.e. 263 | > simultaneous coding, etc) for codeworld. I hope to see users using this 264 | > new features effectively. 265 | 266 | For more information, see: . 267 | 268 | 13. Improvements to parsing, compiling, and errors for CodeWorld 269 | Student: Pranjal Tale 270 | Primary Mentor: Kyle Butt 271 | Secondary Mentor: Chris Smith 272 | 273 | This student successfully completed the project. 274 | 275 | > My aim for the summer was to add a bunch of features in CodeWorld. This 276 | > included small features (like shifting error sanitizer to haskell, 277 | > shifting it into a separate cabal project to filter runtime errors, etc.) 278 | > to some major features (writing standalone cabal for compilation, adding 279 | > testcases for the same, etc). Apart from this, I also planned to fix some 280 | > bugs that were discovered during the Summer of Haskell period mainly 281 | > because I was expecting some bugs to come up. Although, most of my time 282 | > was spent in adding features itself. 283 | > 284 | > The past few months have been great working with CodeWorld! I learned a 285 | > lot of new things about various technologies and gained a lot of exposure. 286 | > I had been a bit active in open source before, but working with CodeWorld 287 | > and my mentors gave me a far more better experience in the open source 288 | > world than what I had been involved in previously. I still plan to 289 | > contribute to CodeWorld after Summer of Haskell ends, and possibly learn a 290 | > lot more! 291 | 292 | For more information, see: 293 | . 294 | 295 | 14. Exporting and sharing CodeWorld projects 296 | Student: Venkatraman Srikanth 297 | Primary Mentor: Theo Belaire 298 | Secondary Mentor: Han Wang 299 | 300 | This student partially completed the project. 301 | 302 | > CodeWorld users can now export their projects to video. Exporting to 303 | > Android apps is currently under review and will be rolled out soon. I 304 | > couldn't meet all of the initial project goals, but I will continue to 305 | > work on it. This was a great learning experience!" 306 | 307 | For more information, see: . 308 | 309 | 15. Improve editor tooling for CodeWorld 310 | Student: Eric Roberts 311 | Primary Mentor: Emin Karayel 312 | Secondary Mentor: Fernando Alegre 313 | 314 | This student partially completed the project. 315 | 316 | > My project for Summer of Haskell was to improve the tooling for pictures 317 | > in Codeworld. My proposal involved adding a "debug mode" feature to 318 | > inspect generated pictures, including showing source locations. The end 319 | > result was an interface that allows pieces of an picture to be selected 320 | > and to show corresponding source locations and properties of each piece. 321 | 322 | For more information, see: 323 | . 324 | 325 | We thank all the participants for the great summer and look forward to Summer of 326 | Haskell 2018! 327 | 328 | Finally, we'd like to thank our generous sponsors again, without whom Summer of 329 | Haskell would not have been possible: 330 | 331 | - [haskell.org](http://haskell.org) kicked things off this year by funding a 332 | student and organizing the Summer of Haskell 2017 after a successful 333 | [Summer of Haskell 2016](https://mail.haskell.org/pipermail/haskell-cafe/2016-December/125702.html). 334 | 335 | - [Asahi Net](https://asahi-net.jp/en/) is a Japanese Internet service provider that 336 | has been running stable systems for over 25 years. They are a proud sponsor of 337 | the Summer of Haskell, and contribute to the Japanese Haskell community. 338 | 339 | - [Awake Networks](http://www.awakenetworks.com/) is building a next generation 340 | network security and analytics platform. They are a proud sponsor of the Summer 341 | of Haskell and contribute broadly to the Haskell community. 342 | 343 | - [CodeWorld](http://code.world/) is an educational project that blends 344 | mathematics and Haskell programming into a visual playground. Chris Smith has 345 | volunteered to fund two students to work on CodeWorld in particular. 346 | 347 | - [Digital Asset](http://digitalasset.com/) provides Distributed Ledger solutions 348 | for financial institutions globally. They have developed a pure, typed, 349 | functional, domain specific language for writing contracts, called DAML. They 350 | are a proud sponsor of the Summer of Haskell and contribute broadly to the 351 | Haskell community. 352 | 353 | - [Facebook](http://facebook.com/) uses Haskell in its 354 | [anti-abuse infrastructure](https://code.facebook.com/posts/745068642270222/fighting-spam-with-haskell/), 355 | and as part of that effort we open-sourced the 356 | [Haxl](https://github.com/facebook/Haxl) framework which is being used at scale 357 | in production to automatically parallelise data-fetching code. We're delighted 358 | to be able to support the Haskell community's efforts by sponsoring a student 359 | for this year's Summer of Haskell. 360 | 361 | - [Fugue Inc.](http://fugue.co/) radically simplifies cloud operations with its 362 | software-defined system for dynamically orchestrating and enforcing cloud 363 | infrastructure at scale. Fugue uses Haskell in its product and is proud to 364 | sponsor a student to improve the ecosystem. 365 | 366 | - [Galois](http://galois.com/) applies cutting-edge computer science and applied 367 | mathematics to solve difficult technological problems, delivering practical 368 | solutions tailored to our clients’ needs. Haskell and other functional 369 | programming languages are key tools we use in providing these solutions. 370 | 371 | - [IOHK](https://iohk.io/) is a technology company committed to using 372 | peer-to-peer technologies to provide financial services to the three billion 373 | people who don't have them. We implement our first-principles cryptographic 374 | research in Haskell and we are committed to the development of the Haskell 375 | ecosystem. 376 | 377 | - [Tweag I/O](http://tweag.io) is a network of software innovation labs across 378 | Europe. We develop novel solutions and products for our clients around the 379 | world. Haskell is key to delivering fast, correct and maintainable code. We 380 | have shipped Haskell in anything from tiny web services to large 381 | high-performance compute clusters with custom hardware. We're particularly 382 | keen to help the community grow Haskell into the strongest systems programming 383 | language and ecosystem out there. We're very proud to sponsor a student this 384 | summer to help make it happen. 385 | 386 | Davean has volunteered to fund a student expressly to work on the [Hadrian build 387 | system for GHC](/ideas.html#hadrian-ghc). Steven Keuchel has provided funds for 388 | a student to work on Haskey. 389 | -------------------------------------------------------------------------------- /content/news/2017-12-25-call-for-ideas.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Call for Ideas for 2018' 3 | author: 'Niki Vazou & Jasper Van der Jeugt' 4 | --- 5 | 6 | Google Summer of Code [will take place again in 2018][1]. Last year, Haskell.org 7 | was not selected, and we decided to [run our own program][2], which ended very 8 | [successfully][3]. 9 | 10 | This year, we would like to apply to Google Summer of Code again, since their 11 | sponsorship is very significant. The main feedback we received last year was 12 | that we didn’t really have a great homepage for Summer of Code with ideas for 13 | students (things were very rushed and we ended up submitting a link to an 14 | outdated bug tracker -- not ideal!). 15 | 16 | We already started fixing that last year by building a [nicer webpage to host 17 | ideas][4]. We would now like to call on the community to submit ideas for the 18 | students. 19 | 20 | If you are the maintainer or the user of a Haskell project, and you have an 21 | improvement in mind which a student could work on during the summer, please 22 | submit an idea here: 23 | 24 | 25 | 26 | Or contact Niki Vazou (nvazou [AT] cs.umd.edu) or myself (m [AT] jaspervdj.be) 27 | directly. 28 | 29 | For context, Google Summer of Code is a program where Google sponsors students 30 | to work on open-source projects during the summer. Haskell.org has taken part 31 | in this program from 2006 until 2015. Many important improvements to the 32 | ecosystem have been the direct or indirect result of Google Summer of Code 33 | projects, and it has also connected new people with the existing community. 34 | 35 | Projects should benefit as many people as possible -- e.g. an improvement to GHC 36 | will benefit more people than an update to a specific library or tool, but both 37 | are definitely valid. New libraries and applications written in Haskell, rather 38 | than improvements to existing ones, are also accepted. Projects should be 39 | concrete and small enough in scope such that they can be finished by a student 40 | in three months. 41 | 42 | [1]: https://opensource.googleblog.com/2017/09/announcing-google-summer-of-code-2018.html 43 | [2]: https://summer.haskell.org/news/2017-02-28-2017-announce.html 44 | [3]: https://summer.haskell.org/news/2017-09-15-final-results.html 45 | [4]: https://summer.haskell.org/ideas.html 46 | -------------------------------------------------------------------------------- /content/news/2018-03-14-student-applications.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Student Applications are now open' 3 | author: 'Jasper Van der Jeugt & George Wilson' 4 | --- 5 | 6 | Hey all, 7 | 8 | As we've previously announced through different channels, Haskell.org was 9 | accepted into [Google Summer of Code] 2018. 10 | 11 | [Google Summer of Code]: https://summerofcode.withgoogle.com/organizations/5706672807346176/ 12 | 13 | Google Summer of Code 15 | 16 | Students application have now opened. Students can submit their proposal at the 17 | [Summer of Code Dashboard](https://summerofcode.withgoogle.com/). The deadline 18 | for submissions is the **27th of March**. 19 | 20 | We are also seeking mentors for possible projects. This year, we would like to 21 | assign a back-up mentor for each student. If you are interested in mentoring, 22 | please [contact us](/contact.html) so we can add you to the mentor list 23 | directly. Having good mentors is an important factor in making the students 24 | feel welcome and guiding them to a succesful completion of their projects. 25 | 26 | If you would like to apply but you don't know how to start your proposal, have a 27 | look at our [ideas list](/ideas.html) and [this great 28 | guide](http://write.flossmanuals.net/gsocstudentguide/writing-a-proposal/). 29 | 30 | Lastly, we recognize that inclusion is an important part of our mission to 31 | promote Haskell. Therefore, we strongly encourage applications from people in 32 | communities that are underrepresented in functional programming, including but 33 | not limited to women; people of color; people in gender, sexual and romantic 34 | minorities; people with disabilities; people residing in Asia, Africa, or Latin 35 | America; and people who have never taken part in similar programs before. 36 | -------------------------------------------------------------------------------- /content/news/2018-04-23-accepted-projects.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Accepted projects for 2018' 3 | author: 'Jasper Van der Jeugt' 4 | --- 5 | 6 | Hey all, 7 | 8 | We are happy to announce the 17 projects that have been accepted to participate 9 | in Google Summer of Code 2018 for the Haskell.org project. 10 | 11 | We would like to thank Google for organizing the program, all students who 12 | applied for the quality proposals of course the mentors for volunteering to 13 | guide the projects! 14 | 15 | Without further ado, here are the accepted projects: 16 | 17 | - [Visual Tools and Bindings for Debugging in Code World](#visual-tools-and-bindings-for-debugging-in-code-world) 18 | - [Help Hadrian](#help-hadrian) 19 | - [Add support for deprecating exports](#add-support-for-deprecating-exports) 20 | - [Hi Haddock](#hi-haddock) 21 | - [Improving the GHC code generator](#improving-the-ghc-code-generator) 22 | - [Crucible: A Library for In-Memory Data Analysis in Haskell](#crucible-a-library-for-in-memory-data-analysis-in-haskell) 23 | - [Dependently Typed Core Replacement in GHC](#dependently-typed-core-replacement-in-ghc) 24 | - [Benchmarking graph libraries and optimising algebraic graphs](#benchmarking-graph-libraries-and-optimising-algebraic-graphs) 25 | - [Improvements to GHC's compilation for conditional constructs.](#improvements-to-ghcs-compilation-for-conditional-constructs.) 26 | - [Support for Multiple Public Libraries in a .cabal package](#support-for-multiple-public-libraries-in-a-.cabal-package) 27 | - [Functional test framework for the Haskell IDE Engine and Language Server Protocol Library](#functional-test-framework-for-the-haskell-ide-engine-and-language-server-protocol-library) 28 | - [Native-Metaprogramming Reloaded](#native-metaprogramming-reloaded) 29 | - [Format-Preserving YAML](#format-preserving-yaml) 30 | - [Enhancing the Haskell Image Processing Library with State of the Art Algorithms](#enhancing-the-haskell-image-processing-library-with-state-of-the-art-algorithms) 31 | - [Making GHC Tooling friendly](#making-ghc-tooling-friendly) 32 | - [Helping cabal new-build become just cabal build](#helping-cabal-new-build-become-just-cabal-build) 33 | - [Parallel Automatic Differentiation](#parallel-automatic-differentiation) 34 | 35 | # Visual Tools and Bindings for Debugging in Code World 36 | 37 | Student: Krystal Maughan 38 | Mentors: Chris Smith, Gabriel Gonzalez 39 | Blog: 40 | 41 | Visual Debugging tools that will allow various ages to interact with and learn 42 | visually while tracing their bugs in Haskell. 43 | 44 | # Help Hadrian 45 | 46 | Student: Chitrak Raj Gupta 47 | Mentors: Andrey Mokhov, Moritz Angermann 48 | 49 | Current build systems such as `make` have a very complex structure and are 50 | difficult to understand or modify. Hadrian uses functional programming to 51 | implement abstractions to make codebase much more comprehensible. Build Rules 52 | are defined using Shake Library, and the results produced are much faster and 53 | scalable than current make based system. But the in-use implementation of 54 | Hadrian is still in development phase and not completely ready to be deployed. I 55 | believe that Hadrian will serve a huge assistance in increasing the productivity 56 | of Haskell developers. Therefore, the aim of my project will be to push Hadrian 57 | a few steps closer to deployment, so that the Haskell community can code with a 58 | bit more efficiency. 59 | 60 | A recent Pull Request by Alp Mestanogullary has implemented a basic rule for 61 | binary distribution. Also, I have been able to figure out multiple sources of 62 | errors causing validation failures, and my Pull Request has brought the number 63 | of failures down significantly. 64 | 65 | Hence, the major goals of my project will be to: 66 | 67 | 1. Achieve ghc-quake milestone that is listed in Hadrian. 68 | 2. Implement missing features in Hadrian. 69 | 3. Build a more comprehensive documentation of Hadrian. 70 | 71 | # Add support for deprecating exports 72 | 73 | Student: alanas 74 | Mentors: Matthew Pickering, Erik de Castro Lopo 75 | 76 | Add support of deprecation pragmas within module exports. This would ease the 77 | transition between different versions of the software by warning the developers 78 | that the functions/types/classes/constructors/modules that they are using are 79 | deprecated. 80 | 81 | # Hi Haddock 82 | 83 | Student: Simon Jakobi 84 | Mentors: Herbert Valerio Riedel, Alex Biehl 85 | Blog: 86 | 87 | A long-standing issue with Haskell’s documentation tool Haddock is that it needs 88 | to effectively re-perform a large part of the parse/template-haskell/typecheck 89 | compilation pipeline in order to extract the necessary information from Haskell 90 | source for generating rendered Haddock documentation. This makes Haddock 91 | generation a costly operation, and makes for a poor developer experience. 92 | 93 | An equally long-standing suggestion to address this issue is to have GHC include 94 | enough information in the generated `.hi` interface files in order to avoid 95 | Haddock having to duplicate that work. This would pave the way for following 96 | use-cases and/or have the following benefits: 97 | 98 | 1. Significantly speed up Haddock generation by avoiding redundant work. 99 | 2. On-the-fly/lazy after-the-fact Haddock generation in cabal new-haddock and 100 | stack haddock for already built/installed Cabal library packages. 101 | 3. Add native support for a :doc command in GHCi’s REPL and editor tooling 102 | (ghc-mod/HIE) similar to the one available in other languages (c.f. the Idris 103 | REPL or the Python REPL) 104 | 4. Allow downstream tooling like Hoogle or Hayoo! to index documentation right 105 | from interface files. 106 | 5. Simplify Haddock’s code base. 107 | 108 | # Improving the GHC code generator 109 | 110 | Student: Abhiroop Sarkar 111 | Mentors: Carter Schonwald, Ben Gamari 112 | 113 | This project attempts to improve the native code generator of GHC by adding 114 | support for Intel AVX and SSE SIMD instructions. This support would enable GHC 115 | to expose a bunch of vector primitive operations, which can be utilized to by 116 | various high performance and scientific computing libraries of the Haskell 117 | ecosystem to parallelize their code for free. 118 | 119 | # Crucible: A Library for In-Memory Data Analysis in Haskell 120 | 121 | Student: Gagandeep Bhatia 122 | Mentors: Marco Zocca, Andika D. Riyandi 123 | 124 | _Note: this project was slightly adjusted from its proposed form after some 125 | discussion with the mentors and it will have a stronger focus on improving 126 | existing libraries._ 127 | 128 | A typical workflow in interactive data analysis consists of : 129 | 130 | - Loading data (e.g. a CSV on disk) 131 | - Transforming the data 132 | - Various data processing stages 133 | - Storing the result in some form (e.g. in a database). 134 | 135 | The goal of this project is to provide a unified and idiomatic Haskell way of 136 | carrying out these tasks. Informally, you can think of “dplyr”/“tidyr” from the 137 | R ecosystem, but type safe. This project aims to provide a library with the 138 | following features: 139 | 140 | - An efficient data structure for possibly larger-than-memory tabular data. The 141 | Frames library is notable prior work, and this project may build on top of it 142 | (namely, by extending its functionality for generating types from stored 143 | data). 144 | - A set of functions to “tidy”/clean the data to bring it to a form fit for 145 | further analysis, e.g. splitting one column to multiple columns (“spread”) or 146 | vice versa (“gather”). 147 | - A DSL for performing a representative set of relational operations e.g. 148 | filtering/aggregation. 149 | 150 | # Dependently Typed Core Replacement in GHC 151 | 152 | Student: Ningning Xie 153 | Mentors: Richard Eisenberg 154 | 155 | In recent years, several works (Weirich et al., 2017; Eisenberg, 2016; Gundry, 156 | 2013) have proposed to integrate dependent types into Haskell. However, 157 | compatibility with existing GHC features makes adding full-fledged dependent 158 | types into GHC very difficult. Fortunately, GHC has many phases underneath so it 159 | is possible to change one intermediate language without affecting the user 160 | experience, as steps towards dependent Haskell. The goal of this proposal is the 161 | replacement of GHC’s core language with a dependently-typed variant. 162 | 163 | # Benchmarking graph libraries and optimising algebraic graphs 164 | 165 | Student: Alexandre Moine 166 | Mentors: Andrey Mokhov, Alois Cochard 167 | Blog: 168 | 169 | A graph represents a key structure in computer science and they are known to be 170 | difficult to work with in functional programming languages. Several libraries 171 | are being implemented to create and process graphs in Haskell, each of them 172 | using different graph representation: Data.Graph from containers, fgl, 173 | hash-graph and alga. Due to their differences and the lack of a common 174 | benchmark, it is not easy for a new user to select the one that will best fit 175 | their project. The new approach of alga seems particularly interesting since the 176 | way it deals with graphs is based on tangible mathematical results. Still, it is 177 | not very user friendly and it lacks some important features like widely-used 178 | algorithms or edge labels. 179 | 180 | Therefore, I propose to develop a benchmarking suite that will establish a 181 | reference benchmark for these libraries, as well as to enhance alga’s 182 | capabilities. 183 | 184 | # Improvements to GHC's compilation for conditional constructs. 185 | 186 | Student: Andreas Klebinger 187 | Mentors: José Calderón, Joachim Breitner, Ben Gamari 188 | 189 | While GHC is state of the art in many respects compilation of conditional 190 | constructs has fallen behind projects like Clang/GCC. 191 | 192 | I intend to rectify this by working on the following tasks: 193 | 194 | - Implement cmov support for Cmm 195 | - Use cmov to improve simple branching code 196 | - Use lookup tables over jump tables for value selection when useful. 197 | - Enable expression of three way branching on values in Cmm code. 198 | - Improve placement of stack adjustments and checks. 199 | 200 | # Support for Multiple Public Libraries in a .cabal package 201 | 202 | Student: Francesco Gazzetta (@fgaz) 203 | Mentors: Mikhail Glushenkov, Edward Yang 204 | 205 | Large scale haskell projects tend to have a problem with lockstep distribution 206 | of packages (especially backpack projects, being extremely granular). The unit 207 | of distribution (package) coincides with the buildable unit of code (library), 208 | and consequently each library of such an ecosystem (ex. amazonka) requires 209 | duplicate package metadata (and tests, benchmarks...). 210 | 211 | This project aims to separate these two units by introducing multiple libraries 212 | in a single cabal package. 213 | 214 | This proposal is based on [this 215 | issue](https://github.com/haskell/cabal/issues/4206) by ezyang. 216 | 217 | # Functional test framework for the Haskell IDE Engine and Language Server Protocol Library 218 | 219 | Student: Luke Lau 220 | Mentors: Alan Zimmerman 221 | Blog: 222 | 223 | The Haskell IDE Engine is a Haskell backend for IDEs, which utilises the 224 | Language Server Protocol to communicate between clients and servers. 225 | 226 | This projects aims to create a test framework that can describe a scenario 227 | between an LSP client and server from start to finish, so that functional tests 228 | may be written for the IDE engine. If time permits, this may be expanded to be 229 | language agnostic or provide a set of compliance tests against the LSP 230 | specification. 231 | 232 | # Native-Metaprogramming Reloaded 233 | 234 | Student: Shayan Najd 235 | Mentors: Ben Gamari, Alan Zimmerman 236 | 237 | The goal is to continue on an ongoing work, utilising the Trees that Grow 238 | technique, to introduce native-metaprogramming in GHC. Native-metaprogramming is 239 | a form of metaprogramming where a metalanguage's own infrastructure is directly 240 | employed to generate and manipulate object programs. It begins by creating a 241 | single abstract syntax tree (AST) which can serve a purpose similar to what is 242 | currently served by Template Haskell (TH), and the front-end AST inside GHC 243 | (HsSyn). Meta-programs could then leverage, much more directly, the machinery 244 | implemented in GHC to process Haskell programs. This work can also possibly 245 | integrate with Alan Zimmerman’s work on compiler annotations in GHC, and enable 246 | a better IDE support. 247 | 248 | # Format-Preserving YAML 249 | 250 | Student: Wisnu Adi Nurcahyo 251 | Mentors: Tom Sydney Kerckhove, Jasper Van der Jeugt 252 | Blog: 253 | 254 | Sometime Stack (The Haskell Tool Stack) ask us to add an extra dependency 255 | manually. Suppose that we use the latest Hakyll that needs a 256 | `pandoc-citeproc-0.13` which is missing in the latest stable Stack LTS. Stack 257 | asks us to add the extra dependency to solve this problem. Wouldn't it be nice 258 | if Stack could add the extra dependency by itself? 259 | 260 | # Enhancing the Haskell Image Processing Library with State of the Art Algorithms 261 | 262 | Student: khilanravani 263 | Mentors: Alp Mestanogullari 264 | 265 | The project proposed here aims to implement different classes of Image 266 | processing algorithms using Haskell and incorporate the same to the existing 267 | code base of Haskell Image Processing (HIP) package. The algorithms that I plan 268 | to incorporate in the HIP package have vast applications in actual problems in 269 | image processing. Including these algorithms to the existing code base would 270 | help more and more users to really use Haskell while working on some computer 271 | vision problems and this would make Haskell (kind of) ahead in the race of with 272 | functional programming languages such as Elm or Clojure (since their image 273 | processing libraries are pretty naive). In this way, this project can 274 | substantially benefit the Haskell organization as well as the open source 275 | community. Some of the algorithms proposed here include the famous Canny edge 276 | detection, Floyd - Steinberg (Dithering) along with other popular tools used in 277 | computer vision problems. 278 | 279 | # Making GHC Tooling friendly 280 | 281 | Student: Zubin Duggal 282 | Mentors: Ben Gamari, Gershom Bazerman, Joachim Breitner 283 | 284 | GHC builds up a wealth of information about Haskell source as it compiles it, 285 | but throws all of it away when it's done. Any external tools that need to work 286 | with Haskell source need to parse, typecheck and rename files all over again. 287 | This means Haskell tooling is slow and has to rely on hacks to extract 288 | information from GHC. Allowing GHC to dump this information to disk would 289 | simplify and speed up tooling significantly, leading to a much richer and 290 | productive Haskell developer experience. 291 | 292 | # Helping cabal new-build become just cabal build 293 | 294 | Student: typedrat 295 | Mentors: Herbert Valerio Riedel Mikhail Glushenkov 296 | 297 | While much of the functionality required to use the `new-*` commands has already 298 | been implemented, there are not-insignificant parts of the design that was 299 | created last year that remain unrealized. 300 | 301 | By completing more of this design, I plan to help the `new-` prefix go away and 302 | to allow this safer, cleaner system to replace old-style cabal usage fully by 303 | rounding off the unfinished edges of the current proposal. 304 | 305 | # Parallel Automatic Differentiation 306 | 307 | Student: Andrew Knapp 308 | Mentors: Sacha Sokoloski, Trevor L. McDonell, Edward Kmett, Alois Cochard 309 | 310 | Automatic Differentation (AD) is a technique for computing derivatives of 311 | numerical functions that does not use symbolic differentiation or 312 | finite-difference approximation. AD is used in a wide variety of fields, such as 313 | machine learning, optimization, quantitative finance, and physics, and the 314 | productivity boost generated by parallel AD has played a large role in recent 315 | advances in deep learning. 316 | 317 | The goal of this project is to implement parallel AD in Haskell using the 318 | `accelerate` library. If successful, the project will provide an asymptotic 319 | speedup over current implementations for many functions of practical interest, 320 | stress-test a key foundation of the Haskell numerical infrastructure, and 321 | provide a greatly improved key piece of infrastructure for three of the 322 | remaining areas where Haskell's ecosystem is immature. 323 | -------------------------------------------------------------------------------- /content/news/2018-09-01-final-results.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Haskell.org GSoC results for 2018' 3 | author: 'Jasper Van der Jeugt' 4 | --- 5 | 6 | Hey all, 7 | 8 | Google Summer of Code 2018 is officially over. The 9 | [Haskell.org](http://haskell.org) organisation had a very productive year with 10 | 17 accepted projects out of which 15 were successful. We would like to thank 11 | the students and mentors for the great summer, and, of course, Google for its 12 | generous support towards the open source community. 13 | 14 | Before we get into the summary of this year, we'd like to bring attention to the 15 | fact that we will soon start preparing for GSoC 2019. This means we will be 16 | looking for: 17 | 18 | - *Project ideas*: Even if you are not interested in participating yourself, 19 | maybe you have some ideas about what a student could hack on to improve the 20 | Haskell ecosystem. If that is the case, please submit a PR against 21 | [this repo](https://github.com/haskell-org/summer-of-haskell) or just shoot us 22 | an email. 23 | 24 | - *Mentors*: If you are interested in mentoring a student throughout the summer, 25 | feel free to contact us. You do not need a specific project idea -- anyone 26 | with some Haskell experience willing to help others is welcome. 27 | 28 | - *Students*: If you are thinking about applying to Haskell.org next year, it's 29 | never too early to look for interesting projects. 30 | 31 | Please [reach out to us](/contact.html) if you are interested in any of the 32 | above! 33 | 34 | # Visual Tools and Bindings for Debugging in Code World 35 | 36 | Student: Krystal Maughan 37 | Mentors: Chris Smith, Gabriel Gonzalez 38 | Blog: 39 | 40 | This project was successful. Things got off to a slow start, but once Krystal 41 | got going, she tackled some projects with a lot of impact and benefits for users. 42 | You can find a good overview in 43 | [her blogpost](https://medium.com/@krystal.maughan/breaking-the-space-time-barrier-with-haskell-time-traveling-and-debugging-in-codeworld-a-google-e87894dd43d7). 44 | 45 | # Help Hadrian 46 | 47 | Student: Chitrak Raj Gupta 48 | Mentors: Andrey Mokhov, Moritz Angermann 49 | 50 | This project unfortunately did not pass the first evaluation. 51 | 52 | # Add support for deprecating exports 53 | 54 | Student: alanas 55 | Mentors: Matthew Pickering, Erik de Castro Lopo 56 | 57 | This project was successful. It looks like deprecated exports will be arriving 58 | in GHC 8.8 thanks to alanas's efforts this summer. He wrote a blogpost about 59 | [his experience](https://medium.com/@alanas.pla/my-gsoc-2018-experience-689e1368cf61) 60 | as well. 61 | 62 | # Hi Haddock 63 | 64 | Student: Simon Jakobi 65 | Mentors: Herbert Valerio Riedel, Alex Biehl 66 | Blog: 67 | 68 | This project was successful. An initial version of the `:doc` command made it 69 | into GHC-8.6, and Simon made many improvements to the Haddock internals. You 70 | can read more about it in 71 | [his blogpost](https://sjakobi.github.io/blog/2018/08/14/hi-haddock-3/). 72 | 73 | # Improving the GHC code generator 74 | 75 | Student: Abhiroop Sarkar 76 | Mentors: Carter Schonwald, Ben Gamari 77 | 78 | This project was successful. Because of the complexity of the compiler work 79 | relative to this students familiarity, the code hasn't been merged in yet and 80 | still needs a lot of cleanup and iterating. However, Abhiroop intends to 81 | continue working on this project with the Haskell and GHC community for the next 82 | few months. You can read Abhiroop's summary 83 | [here](https://gist.github.com/Abhiroop/9a2600f24f8139b7fc0742a2b4585bb3). 84 | 85 | # Crucible: A Library for In-Memory Data Analysis in Haskell 86 | 87 | Student: Gagandeep Bhatia 88 | Mentors: Marco Zocca, Andika D. Riyandi 89 | 90 | This project was successful. Together with Gagandeep, we made some changes to 91 | the goals of this project initially and decided to have him target existing 92 | libraries rather than doing a greenfield project. He ended up making a number 93 | of good contributions to the [Data Haskell](http://www.datahaskell.org/) 94 | ecosystem, and the [Frames](https://hackage.haskell.org/package/Frames) library 95 | in particular. He also wrote a wrap-up which you can read 96 | [here](https://www.gagandeepbhatia.com/blog/gsoc-2018-wrap-up-haskell-dataframes-postgres-type-providers-and-more/). 97 | 98 | # Dependently Typed Core Replacement in GHC 99 | 100 | Student: Ningning Xie 101 | Mentors: Richard Eisenberg 102 | 103 | This project was successful. Ningning writes: 104 | 105 | > It was an excellent experience for me to complete GSoC 2018 with Haskell.org. 106 | > During these three monthes, I got the chance to dive into the state of the art 107 | > compiler for Haskell programming language, GHC, with the help from my mentor 108 | > and the broader community. 109 | > 110 | > I chose the project because dependent types are one of my major research 111 | > interests. And indeed I gained a lot from it. Firstly, the project was 112 | > challenging, and working on such a huge codebase sounded frightening, but I 113 | > managed to make progress and get lots of fun from it. I have learned a lot 114 | > during this summer, which includes not only Haskell skills, but also many 115 | > design principles inside GHC. 116 | 117 | More details are available in her 118 | [in-depth report](https://xnning.github.io/papers/gsoc-report.pdf). 119 | 120 | # Benchmarking graph libraries and optimising algebraic graphs 121 | 122 | Student: Alexandre Moine 123 | Mentors: Andrey Mokhov, Alois Cochard 124 | Blog: 125 | 126 | This project was successful. Alexandre worked on a variety of tasks, including 127 | benchmarking, optimisations, testing and even correctness proofs. 128 | [His blogpost has more details](https://blog.nyarlathotep.one/2018/08/gsoc-results/). 129 | 130 | # Improvements to GHC's compilation for conditional constructs. 131 | 132 | Student: Andreas Klebinger 133 | Mentors: José Calderón, Joachim Breitner, Ben Gamari 134 | 135 | This project was successful. Andreas 136 | [posted this gist](https://gist.github.com/AndreasPK/c4a6d8b5f199215ea7747d98d0f65de4) 137 | including some _very impressive_ numbers. Some patches that he worked on this 138 | summer have already been merged into GHC, and it looks the bulk of his work will 139 | also be merged soon. 140 | 141 | # Support for Multiple Public Libraries in a .cabal package 142 | 143 | Student: Francesco Gazzetta (@fgaz) 144 | Mentors: Mikhail Glushenkov, Edward Yang 145 | 146 | This project was successful. Francesco delivered great work just like last 147 | year and it sounds like this will be merged into the Cabal library soon. He 148 | put together a 149 | [final report here](https://github.com/fgaz/gsoc/blob/master/2018/final-report.md). 150 | 151 | # Functional test framework for the Haskell IDE Engine and Language Server Protocol Library 152 | 153 | Student: Luke Lau 154 | Mentors: Alan Zimmerman 155 | Blog: 156 | 157 | This project was successful. Luke wrote 158 | [a bit about the project here](https://lukelau.me/haskell/posts/lsp-test/). 159 | About his experience, he writes: 160 | 161 | > I had very little “real world” Haskell experience before starting, and there’s a 162 | > lot of stuff they don’t teach you in university. But both my mentor and the 163 | > Haskell community were extremely helpful with getting me up to speed and 164 | > answering my many questions. Especially the #haskell channel on Freenode! In a 165 | > lot of IRC channels you can find yourself asking question and never being 166 | > answered, but the people at the Haskell channel were very eager to help and 167 | > explain/discuss lots of different topics. 168 | 169 | # Native-Metaprogramming Reloaded 170 | 171 | Student: Shayan Najd 172 | Mentors: Ben Gamari, Alan Zimmerman 173 | 174 | This project was successful. Shayan made significant progress to the 175 | trees-that-grow fork of GHC, and has a lot of patches ready to merged and 176 | reviewed. The mentors are very positive about the approach. 177 | Shayan's summary [can be found here](https://github.com/shayan-najd/HsAST/blob/master/Report). 178 | 179 | # Format-Preserving YAML 180 | 181 | Student: Wisnu Adi Nurcahyo 182 | Mentors: Tom Sydney Kerckhove, Jasper Van der Jeugt 183 | Blog: 184 | 185 | This project unfortunately did not pass the second evaluation. 186 | 187 | # Enhancing the Haskell Image Processing Library with State of the Art Algorithms 188 | 189 | Student: khilanravani 190 | Mentors: Alp Mestanogullari 191 | 192 | This project was successful. Khilan made several contributions to the 193 | [Haskell Image Processing](https://github.com/lehins/hip) library. 194 | You can see some cool examples of the various algorithms in the 195 | [his wrap-up blogpost](https://medium.com/@khilanravani/image-processing-gsoc18-with-haskell-84177cec618). 196 | 197 | # Making GHC Tooling friendly 198 | 199 | Student: Zubin Duggal 200 | Mentors: Ben Gamari, Gershom Bazerman, Joachim Breitner 201 | 202 | This project was successful. Zubin's patches have not been merged yet but 203 | should be in the next few months. His final report 204 | [can be found here](https://gist.github.com/wz1000/5ed4ddd0d3e96d6bc75e095cef95363d). 205 | 206 | # Helping cabal new-build become just cabal build 207 | 208 | Student: Alexis Williams 209 | Mentors: Herbert Valerio Riedel, Mikhail Glushenkov 210 | 211 | This project was successful. Alexis contributed key features to Cabal's 212 | new-build infrastructure and also fixed an impressive amount of bugs. 213 | She writes about 214 | [her experience here](https://typedr.at/posts/what-i-did-on-my-summer-vacation/). 215 | 216 | # Parallel Automatic Differentiation 217 | 218 | Student: Andrew Knapp 219 | Mentors: Sacha Sokoloski, Trevor L. McDonell, Edward Kmett, Alois Cochard 220 | 221 | This project was successful. Despite being an _extremely_ hard topic to tackle, 222 | Anrew was able to get some 223 | [impressive preliminary results](https://ajknapp.github.io/2018/08/14/notomatic-differentiation.html). 224 | These lay out a very good foundation for future work that could be very valuable 225 | to the Haskell community. 226 | 227 | --- 228 | 229 | We would like to thank all the participants again for the great summer and we 230 | already look forward to the next one! 231 | -------------------------------------------------------------------------------- /content/news/2018-12-28-call-for-ideas.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Call for Ideas for 2019' 3 | author: 'Jasper Van der Jeugt' 4 | --- 5 | 6 | Google Summer of Code will take place again in 2019, [for the 15th year of the 7 | program](https://opensource.googleblog.com/2018/11/google-summer-of-code-15-years-strong.html)! 8 | We are very proud that Haskell.Org has been able to take part every year except 9 | for the initial year (2005) and 2016-2017, when we had to resort to running our 10 | own program. 11 | 12 | Last year, we were fortunate enough to join again, and we think the results 13 | [greatly benefited the Haskell community](https://summer.haskell.org/news/2018-09-01-final-results.html). 14 | We are hoping to do the same for 2019. As far as we know, a really important 15 | part of our application to GSoC is the list of ideas we provide. For that, I 16 | would like to count on all of you. 17 | 18 | If you are the maintainer or the user of a Haskell project, and you have an 19 | improvement in mind which a student could work on during the summer, please 20 | submit an idea here: 21 | 22 | 23 | 24 | For context, Google Summer of Code is a program where Google sponsors students 25 | to work on open-source projects during the summer. Haskell.org has taken part 26 | in this program from 2006 until 2015, and again in 2018. Many important 27 | improvements to the ecosystem have been the direct or indirect result of Google 28 | Summer of Code projects, and it has also connected new people with the existing 29 | community. 30 | 31 | Projects should benefit as many people as possible – e.g. an improvement to GHC 32 | will benefit more people than an update to a specific library or tool, but both 33 | are definitely valid. New libraries and applications written in Haskell, rather 34 | than improvements to existing ones, are also accepted. Projects should be 35 | concrete and small enough in scope such that they can be finished by a student 36 | in three months. 37 | -------------------------------------------------------------------------------- /content/news/2019-02-26-accepted-for-gsoc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Haskell.Org Participating in GSoC 2019' 3 | author: 'Jasper Van der Jeugt' 4 | --- 5 | 6 | We're very excited to announce that Haskell.Org has been 7 | [accepted](https://summerofcode.withgoogle.com/organizations/5556388114202624/) 8 | into the [Google Summer of Code 2019 program](https://summerofcode.withgoogle.com/). 9 | We hope that, like last year, it will lead to a whole range of improvements to 10 | the Haskell ecosystem, and to new faces joining our community! 11 | 12 | We would like to thank everyone who submitted ideas -- this is a key part of 13 | being accepted into GSoC. Now, here's the near term timeline: 14 | 15 | - **Today - March 25**: Potential student participants discuss application ideas 16 | with mentors 17 | - **March 25 - April 9**: Students can submit applications 18 | - **May 6**: Accepted student proposals announced 19 | 20 | At this point, we're looking for both students and extra mentors. We would like 21 | to assign at least two mentors to each project if possible, so the students get 22 | the support they deserve. Additional ideas for projects are still welcome! 23 | 24 | There's a lot of information on our 25 | [Summer of Haskell page](https://summer.haskell.org/). 26 | If there are any students who are not sure where to begin, feel free to 27 | [reach out to us directly](https://summer.haskell.org/contact.html)! 28 | -------------------------------------------------------------------------------- /content/news/2019-05-29-alga-introduction.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Student Blog: Introducing Bipartite Graphs in Alga' 3 | author: 'Vasily Alferov' 4 | --- 5 | 6 | I am a student at Summer of Haskell this year and I am very thankful to authors 7 | of this site who provided me this platform to have a blog about GSoC. This is 8 | an introduction post about my project. I am planning to write regular posts 9 | on my progress and when I find something interesting. 10 | 11 | The idea of the project was on the 12 | [ideas list](https://summer.haskell.org/ideas.html#algebraic-graphs) published 13 | earlier. Two of us were accepted for this project, the other one being Adithya 14 | Kumar and who will be doing the work described on the ideas list. He told me 15 | his GSoC blog will probably be [here](https://adithyaov.github.io/). 16 | 17 | My task is to introduce bipartite graphs to Alga and that is what I am going to 18 | tell you about now. 19 | 20 | # Algebraic graphs 21 | 22 | There are three common ways to represent graphs in computing: 23 | 24 | * Adjacency matrix 25 | * Adjacency lists 26 | * Edge lists. 27 | 28 | All three of them have their advantages and disadvantages. The most commonly 29 | used is the adjacency lists approach: that is storing a list of neighbors for 30 | each vertex. In fact, I can think of only one common algorithm for which this 31 | approach is not perfect: it is Kruskal's algorithm for finding the minimum 32 | spanning tree. 33 | 34 | However, the problem is that feeding graphs formed this way to algorithms is 35 | not always safe. For example, if the algorithm is designed for bidirectional 36 | graphs, it may rely on the fact that if some vertex `u` is in the list of 37 | neighbors of some another vertex `v` then `v` is in the list of neighbors of 38 | `u`. 39 | 40 | A traditional solution for functional programming would be to guarantee the 41 | consistency of input data for the algorithm by taking a representation of the 42 | graph that would not allow a wrong graph to be passed. That's what we call 43 | _type safety_. 44 | 45 | [Alga](https://github.com/snowleopard/alga) is a library that provides such a 46 | safe representation with a beautiful algebraic interpretation. It also has a 47 | nice set of algorithms out of the box. You can find the paper on Alga by its 48 | author [here](https://github.com/snowleopard/alga-paper), I'm just going to 49 | provide some basics. 50 | 51 | Consider the following definition for the graph data type: 52 | 53 | ```Haskell 54 | data Graph a = Empty 55 | | Vertex a 56 | | Overlay (Graph a) (Graph a) 57 | | Connect (Graph a) (Graph a) 58 | ``` 59 | 60 | The constructors mean the following: 61 | 62 | * `Empty` constructs an empty graph. 63 | * `Vertex v` constructs a graph of single vertex labeled `v`. 64 | * `Overlay g h` constructs a graph with sets of vertices and edges united from 65 | graphs `g` and `h`. 66 | * `Connect g h` does the same as `Overlay` and also connects all vertices of 67 | `g` to all vertices of `h`. 68 | 69 | One can easily construct a `Graph` of linear size having a list of edges of the 70 | desired graph. In fact, this approach may even save memory for dense graphs 71 | comparing to adjacency lists. And this approach is surely _type safe_ in the 72 | sense described above. Comparing to adjacency lists, there is no problem with 73 | an edge not present in the list of neighbours of another vertex. Another 74 | possible problem with adjacency lists not present here is that an edge might 75 | lead to a vertex with no associated adjacency list. 76 | 77 | Why algebraic? Well, if we write down simple laws for these graphs we will see 78 | that laws for `Connect` and `Overlay` operations are very similar to those for 79 | multiplication and addition in a semiring, respectively. 80 | 81 | This was just a brief description of Alga. There are many other parts not 82 | covered here. One example is that `Graph` might also be provided as a type 83 | class rather than a data type. This approach is much more flexible. 84 | 85 | # Bipartite graphs 86 | 87 | An important part of Alga is providing different type-safe representations for 88 | different kinds of graph. For example, one for edge-labeled graphs 89 | [was introduced](http://hackage.haskell.org/package/algebraic-graphs-0.4/docs/Algebra-Graph-Labelled.html) 90 | last year. 91 | 92 | Another option is to add a representation that _restricts_ the set of possible 93 | graphs. One example from the ideas list is to represent only acyclic directed 94 | graphs. This is what Adithya will be doing. And my task for the first 95 | evaluation period is to provide bipartite graphs. 96 | 97 | We often meet bipartite graphs in real world: connections between entities of 98 | different kinds are common. For example, graph of clients and backends they use 99 | is bipartite. Another example I can think of is about content recommendation 100 | systems: graph of users and films or songs they like is bipartite, too. 101 | 102 | There are many ideas on how to do so. For example, in my proposal I suggested 103 | an approach that seems to match Alga's design: 104 | 105 | ```Haskell 106 | data Bigraph a b = Empty 107 | | LeftVertex a 108 | | RightVertex b 109 | | Overlay (Bigraph a b) (Bigraph a b) 110 | | Connect (Bigraph a b) (Bigraph a b) 111 | ``` 112 | 113 | Here, `Connect` only connects left vertices to the right. As my mentor Andrey 114 | figured, there is an interesting addition to the laws: 115 | `(LeftVertex u) * (LeftVertex v) = (LeftVertex u) + (LeftVertex v)`. Of course, 116 | the same holds for the right vertices. 117 | 118 | By now, we agreed that first, I will focus on implementing adjacency maps for 119 | bipartite graphs (hey, didn't I mention that Alga uses adjacency maps on the 120 | inside?). It doesn't make much sense to make a separate algebraic 121 | representation, but I may do it if I find something interesting in it. 122 | 123 | Now, the first task is to implement the conversion function, which I'm going to 124 | start right now. This implementation will simply ignore the edges between 125 | vertices of the same part. 126 | 127 | ```Haskell 128 | fromGraph :: Graph (Either a b) -> Bipartite.AdjacencyMap a b 129 | fromGraph = undefined 130 | ``` 131 | 132 | With this stub, my summer-long dive into Haskell begins! 133 | -------------------------------------------------------------------------------- /content/news/2019-07-26-testing-bipartiteness.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Student Blog: Testing Bipartiteness with Monad Transformers' 3 | author: 'Vasily Alferov' 4 | --- 5 | 6 | I am a student at Summer of Haskell this year and this is my second post on 7 | this platform. In my previous 8 | [post](https://summer.haskell.org/news/2019-05-29-alga-introduction.html) I 9 | gave a brief explanation of my task. Now that I finished the "routine" 10 | part of adding the necessary data types and manipulation functions, I'm here to 11 | tell you about my implementation of the algorithm for testing bipartiteness of 12 | graphs. 13 | 14 | A graph is called bipartite if its vertices can be split into two parts in 15 | such way that there are no edges inside one part. While testing graph on 16 | tripartiteness is NP-hard, there is a linear algorithm that tests graph on 17 | bipartiteness and restores the partition. 18 | 19 | # Vertex On Your Side 20 | 21 | The algorithm is usually one of the first graph algorithms given in any 22 | university course. The idea is rather straightforward: we try to assign 23 | vertices to the left or right part in some way, and when we get a conflict, we 24 | claim that the graph is not bipartite. 25 | 26 | First, we assign some vertex to the left part. Then, we can confidently 27 | say that all neighbours of this vertex should be assigned to the right part. 28 | Then, all neighbours of this vertex should be assigned to the left part, and so 29 | on. We continue this until all the vertices in the connected component are 30 | assigned to some part, then we repeat the same action on the next connected 31 | component, and so on. 32 | 33 | If there is an edge between vertices in the same part, one can easily find an 34 | odd cycle in the graph, hence the graph is not bipartite. Otherwise, we have 35 | the partition, hence the graph is bipartite. 36 | 37 | There are two common ways of implementing this algorithm in linear time: using 38 | [Depth-First Search](https://en.wikipedia.org/wiki/Depth-first_search) or 39 | [Breadth-First Search](https://en.wikipedia.org/wiki/Breadth-first_search). 40 | We usually select DFS for this algorithm in imperative languages. The reason is 41 | that DFS implementation is a little bit simpler. I selected DFS, too, as a 42 | traditional way. 43 | 44 | So, now we came to the following scheme. We go through the vertices in DFS 45 | order and assign them to parts, flipping the part when going through an edge. 46 | If we try to assign some vertex to some part and see that it is already 47 | assigned to another part, then we claim that the graph is not bipartite. When 48 | all vertices are assigned to parts and we've looked through all edges, we have 49 | the partition. 50 | 51 | # The Purity Turned Upside Down 52 | 53 | In Haskell, all computations are supposed to be _pure_. Still, if it was 54 | *really* so, we wouldn't be able to print anything to the console. And what I 55 | find most funny about pure computations is that they are so lazy that there is 56 | no pure reason to compute anything. 57 | 58 | Monads are the Haskell way to express computations with *effects*. I'm not 59 | going to give a complete explanation of how they work here, but I find 60 | [this one](http://learnyouahaskell.com/a-fistful-of-monads) very nice and 61 | clear. 62 | 63 | What I **do** want to notice there is that while some monads, like `IO`, are 64 | implemented through some deep magic, others have simple and pure 65 | implementations. So the entire computation in these monads is pure. 66 | 67 | There are many monads that express all kinds of effects. It is a very beautiful 68 | and powerful theory: they all implement the same interface. We will talk about 69 | the three following monads: 70 | 71 | * `Either e a` — a computation that returns value of type `a` or throws an 72 | error of type `e`. The behaviour is very much like exceptions in imperative 73 | languages and the errors may be caught. The main difference is that this monad 74 | is fully logically implemented in the standard library, while in imperative 75 | languages it is usually implemented by the operating system or virtual machine. 76 | * `State s a` — a computation that returns value of type `a` and has an access 77 | to a modifiable state of type `s`. 78 | * `Maybe a`. A `Monad` instance for `Maybe` expresses a computation that can be 79 | at any moment interrupted with returning `Nothing`. But we will mostly speak 80 | of `MonadPlus` instance, which expresses a vice versa effect: this is a 81 | computation which can be at any moment interrupted with returning a concrete 82 | value. 83 | 84 | # The Monad Where It Happens 85 | 86 | We have two data types, `Graph a` and `Bigraph a b`, first of them representing 87 | graphs with vertex labels of type `a` and second representing bipartite graphs 88 | with left part labels of type `a` and right part labels of type `b`. 89 | 90 | **A Word of Warning**: These are not Alga data types. Alga representation for 91 | bipartite graphs is not yet released and there is no representation for 92 | undirected graphs. 93 | 94 | We also assume that we have the following functions. 95 | 96 | ```Haskell 97 | -- List of neighbours of a given vertex. 98 | neighbours :: Ord a => a -> AM.AdjacencyMap a -> [a] 99 | 100 | -- Convert a graph with vertices labelled with their parts to a bipartite 101 | -- graph, ignoring the edges within one part. 102 | toBipartiteWith :: (Ord a, Ord b, Ord c) => (a -> Either b c) 103 | -> Graph a 104 | -> Bigraph b c 105 | 106 | -- List of vertices 107 | vertexList :: Ord a => AM.AdjacencyMap a -> [a] 108 | ``` 109 | 110 | Now we write the definition for the function we are going to implement. 111 | 112 | ```Haskell 113 | type OddCycle a = [a] 114 | detectParts :: Ord a => Graph a -> Either (OddCycle a) (Bigraph a a) 115 | ``` 116 | 117 | It can be easily seen that the odd cycle is at the top of the recursion stack 118 | in case we failed to find the partition. So, in order to restore it, we only 119 | need to cut everything from the recursion stack before the first occurrence of 120 | the last vertex. 121 | 122 | We will implement a Depth-First Search, while maintaining a map of part 123 | identifiers for each vertex. The recursion stack for the vertex in which we 124 | failed to find the partition will be automatically restored with the `Functor` 125 | instance for the monad we choose: we only need to put all vertices from the 126 | path into the result on our way back from the recursion. 127 | 128 | The first idea is to use the `Either` monad, that fits perfectly well to our 129 | goals. The first implementation I had was something very close to that. In 130 | fact, I had five different implementations at some point to choose the best, 131 | and I finally stopped at another option. 132 | 133 | First, we need to maintain a map of effects — this is something about 134 | `State`. Then, we need to stop when we found a conflict. This could be either 135 | `Monad` instance for `Either` or `MonadPlus` instance for `Maybe`. The main 136 | difference is that `Either` has a value to be returned in case of success 137 | while `MonadPlus` instance for `Maybe` only returns a value in case we failed 138 | to find the partition. As we don't need a value because it's already stored in 139 | `State`, we choose `Maybe`. Now, we need to combine two monadic effects, so we 140 | need [monad transformers](https://en.wikibooks.org/wiki/Haskell/Monad_transformers), 141 | which are a way to combine several monadic effects. 142 | 143 | Why had I chosen such complicated type? There are two reasons. The first is 144 | that the implementation becomes very similar to one we have in imperative 145 | languages. The second is that I needed to manipulate the value returned in case 146 | of conflict to restore the odd cycle, and this becomes much simpler in `Maybe`. 147 | 148 | So, here we go now. 149 | 150 | ```Haskell 151 | {-# LANGUAGE ExplicitForAll #-} 152 | {-# LANGUAGE ScopedTypeVariables #-} 153 | 154 | data Part = LeftPart | RightPart 155 | 156 | otherPart :: Part -> Part 157 | otherPart LeftPart = RightPart 158 | otherPart RightPart = LeftPart 159 | 160 | type PartMap a = Map.Map a Part 161 | type OddCycle a = [a] 162 | 163 | toEither :: Ord a => PartMap a -> a -> Either a a 164 | toEither m v = case fromJust (v `Map.lookup` m) of 165 | LeftPart -> Left v 166 | RightPart -> Right v 167 | 168 | type PartMonad a = MaybeT (State (PartMap a)) [a] 169 | 170 | detectParts :: forall a. Ord a => Graph a -> Either (OddCycle a) (Bigraph a a) 171 | detectParts g = case runState (runMaybeT dfs) Map.empty of 172 | (Just c, _) -> Left $ oddCycle c 173 | (Nothing, m) -> Right $ toBipartiteWith (toEither m) g 174 | where 175 | inVertex :: Part -> a -> PartMonad a 176 | inVertex p v = ((:) v) <$> do modify $ Map.insert v p 177 | let q = otherPart p 178 | msum [ onEdge q u | u <- neigbours v g ] 179 | 180 | {-# INLINE onEdge #-} 181 | onEdge :: Part -> a -> PartMonad a 182 | onEdge p v = do m <- get 183 | case v `Map.lookup` m of 184 | Nothing -> inVertex p v 185 | Just q -> do guard (q /= p) 186 | return [v] 187 | 188 | processVertex :: a -> PartMonad a 189 | processVertex v = do m <- get 190 | guard (v `Map.notMember` m) 191 | inVertex LeftPart v 192 | 193 | dfs :: PartMonad a 194 | dfs = msum [ processVertex v | v <- vertexList g ] 195 | 196 | oddCycle :: [a] -> [a] 197 | oddCycle c = tail (dropWhile ((/=) last c) c) 198 | ``` 199 | 200 | I'll try to explain each of the first four scoped functions: this is the core 201 | of the algorithm. 202 | 203 | * `inVertex` is the part of DFS that happens when we visit the vertex for the 204 | first time. Here, we assign the vertex to the part and launch `onEdge` for 205 | every incident edge. And that's the place where we hope to restore the call 206 | stack: if a `Just` is returned from sum edge, we add `v` to the beginning. 207 | * `onEdge` is the part that happens when we visit any edge. It happens twice 208 | for each edge. Here we check if the vertex on the other side is visited. If 209 | not, we visit it. Else we check whether we found an odd cycle. If we did, we 210 | simple return the current vertex as a singleton. The other vertices from the 211 | path are added at the way back from the recursion. 212 | * `processVertex` checks if the vertex is visited and runs DFS on it if not. 213 | * `dfs` runs `processVertex` on all vertices. 214 | 215 | That's it. 216 | 217 | # The Story of INLINE 218 | 219 | When I first wrote the above code, `action` was not explicitly inlined. Then, 220 | when I was benchmarking different versions of `detectParts` to select the best, 221 | I noticed that on some graphs this version with transformers had a serious 222 | overhead over the version with `Either`. I had no idea of what was going on, 223 | because semantically two functions were supposed to perform the same operations. 224 | And it became even weirder when I ran it on another machine with another 225 | version of GHC and didn't notice any overhead there. 226 | 227 | After a weekend of reading GHC Core code, I managed to fix this with one 228 | explicit inline. At some point between GHC 8.4.4 and GHC 8.6.5 they changed the 229 | optimizer in some way that it didn't inline `action`. 230 | 231 | This is just a crazy thing about programming I didn't expect to come through 232 | with Haskell. Still, it seems that the optimizers make mistakes even in our 233 | time and it is our job to give them hints of what should be done. For example, 234 | here we knew that the function should be inlined as it is in the imperative 235 | version, and that's a reason to give GHC a hint. 236 | 237 | # What Comes Next? 238 | 239 | When this patch is merged, I'm going to start implementing Hopcroft-Karp 240 | algorithm. I think the BFS part is going to be rather interesting, so the next 241 | blog post will come in a couple of weeks. 242 | -------------------------------------------------------------------------------- /content/news/2019-08-26-alga-results.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Student Blog: Results for Bipartite Graphs Project' 3 | author: 'Vasily Alferov' 4 | --- 5 | 6 | I am a student at Summer of Haskell this year, and that's my final post. This 7 | post is written to sum up the work I've done. Although this post is a formal 8 | requirement of GSoC, I wanted to publish it here to reach a wider audience. 9 | 10 | # My proposal 11 | 12 | When you apply to Summer of Code, you write a proposal. The proposal is a 13 | document in which you describe your ideas on the chosen project. It should be a 14 | clear, detailed text with suggestions on every subtask. The proposal should also 15 | include a timeline, in which you estimate the time you intend to spend on each of those subtasks. 16 | 17 | I chose [this](https://summer.haskell.org/ideas.html#algebraic-graphs) project 18 | for my summer. In my proposal, I drafted all the algorithms mentioned in the 19 | list and suggested a few more. I published this part of my proposal as a Github 20 | gist [there](https://gist.github.com/vasalf/c246171d8ebd784487624853566b8df2). 21 | 22 | I don't suggest this gist as a complete example of a good proposal: it's only a part of 23 | the document I submitted. You should also include some information about you, 24 | together with the timeline. Communication with your future mentors is also a 25 | significant part of the application. 26 | 27 | However, as I mentioned in 28 | [one of my previous posts](https://summer.haskell.org/news/2019-05-29-alga-introduction.html), 29 | another student ended up doing the part suggested in the ideas list. So my task is to 30 | introduce bipartite graphs. 31 | 32 | This task was my idea. I mentioned it in my proposal. I meant that finding 33 | maximum matchings in bipartite graphs should be easily implemented when we have 34 | algorithms for finding maximum flows in networks. Kuhn's algorithm is an 35 | application of the Ford-Fulkerson algorithm, and the Hopcroft-Karp algorithm is 36 | an application of Dinic's algorithm. 37 | 38 | However, this option is not the best. Both algorithms have specialized 39 | implementations that work times faster. So my task for this summer was to 40 | introduce bipartite graphs and special functions for working with them. 41 | 42 | # What I've done 43 | 44 | I made four pull requests to Alga this summer. Each pull request represents a 45 | separate task and summarizes the work of several weeks. 46 | 47 | Each PR contains the actual implementation, tests, and documentation. The whole 48 | project is release-ready after merging each one of them. I put the tests in the 49 | `test/` directory. The documentation for each function and datatype precedes the 50 | declaration. After release, it will compile to beautiful Haddock file like 51 | [this](http://hackage.haskell.org/package/algebraic-graphs-0.4/docs/Algebra-Graph.html). 52 | 53 | # Part I. Definition and properties. 54 | 55 | **Link to PR:** 56 | 57 | In this part, I defined the `Bipartite.AdjacencyMap` datatype and added many 58 | functions to work with adjacency maps. 59 | 60 | The datatype represents a map of vertices into their neighbours. I defined it as 61 | two maps: 62 | 63 | ```Haskell 64 | data AdjacencyMap a b = BAM { 65 | leftAdjacencyMap :: Map.Map a (Set.Set b), 66 | rightAdjacencyMap :: Map.Map b (Set.Set a) 67 | } 68 | ``` 69 | 70 | The properties are based on the existing 71 | [properties](http://hackage.haskell.org/package/algebraic-graphs-0.4/docs/Algebra-Graph.html) 72 | of graphs in Alga. 73 | 74 | # Part II: Testing bipartiteness 75 | 76 | **Link to PR:** 77 | 78 | There is a folklore algorithm that checks if a given graph is bipartite. The 79 | task to implement this algorithm in Haskell was a little challenging for me. 80 | 81 | I finished up with the following definition of the function: 82 | 83 | ```Haskell 84 | detectParts :: Ord a => AM.AdjacencyMap a -> Either (OddCycle a) (AdjacencyMap a a) 85 | ``` 86 | 87 | It is known that a graph is bipartite if and only if it contains no cycles of 88 | odd length. This function either finds an odd cycle or returns a partition. 89 | 90 | The implementation is so exciting that I wrote a whole 91 | [post](https://summer.haskell.org/news/2019-07-26-testing-bipartiteness.html) 92 | about it. I explained the reason I needed monad transformers there and made some 93 | interesting benchmarks that pointed me to use the explicit `INLINE` directive. 94 | 95 | # [WIP] Part III. Graph families. 96 | 97 | **Link to the unfinished PR**: 98 | 99 | Some families of graphs are bipartite: simple paths, even cycles, trees, 100 | bicliques, etc. The task is to provide a simple method to construct all those 101 | graphs. 102 | 103 | The most exciting part of this task was to provide type-safe implementations. 104 | For example, only cycles of even length are bipartite. And speaking of paths, we 105 | should provide a method for constructing paths of vertices of two different 106 | types. 107 | 108 | The `circuit` definition for constructing graphs containing one even cycle is 109 | simple: 110 | 111 | ```Haskell 112 | circuit :: (Ord a, Ord b) => [(a, b)] -> AdjacencyMap a b 113 | ``` 114 | 115 | For the paths, I added a special type for alternating lists: 116 | 117 | ```Haskell 118 | data List a b = Nil | Cons a (List b a) 119 | ``` 120 | 121 | So the `path` definition is: 122 | 123 | ```Haskell 124 | path :: (Ord a, Ord b) => List a b -> AdjacencyMap a b 125 | ``` 126 | 127 | As for now, the PR is almost merge-ready, only several small comments need fixes. 128 | 129 | # [WIP] Part IV. Hopcroft-Karp algorithm for maximum matchings 130 | 131 | **Link to the unfinished PR**: 132 | 133 | This algorithm is the fastest one for maximum matchings in bipartite graphs. The 134 | implementation is rather straightforward. 135 | 136 | However, there is an aspect of this PR I'd like to share there. 137 | 138 | I implemented the following function: 139 | 140 | ```Haskell 141 | augmentingPath :: (Ord a, Ord b) => Matching a b 142 | -> AdjacencyMap a b 143 | -> Either (VertexCover a b) (List a b) 144 | ``` 145 | 146 | Given a matching in a graph, it returns either an augmenting path for the 147 | matching or a vertex cover of the same size, thus proving that the given 148 | matching is maximum. As both outcomes can be easily verified, this helps to 149 | write perfect tests that ensure that the matching returned by my function is 150 | maximum indeed. 151 | 152 | This PR still needs some work. The reason is that two different implementations 153 | behave weirdly on the benchmarks. 154 | 155 | # Results 156 | 157 | I wrote a lot of Haskell this summer. This gave me a lot of experience in this 158 | language. Although there's still work to be done, I'm satisfied with the 159 | results I got. 160 | 161 | I adore the way functional programs are developed. I was surprised to know how 162 | popular testing (QuickCheck) and benchmarking (Criterion) frameworks are 163 | organized. And preciseness of the documentation makes the work a lot easier. 164 | -------------------------------------------------------------------------------- /content/news/2020-01-10-final-results.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Haskell.org GSoC results for 2019' 3 | author: 'Jasper Van der Jeugt' 4 | --- 5 | 6 | [Haskell.org] took part in [Google Summer of Code] again in 2019, and we 7 | had some really successful projects! 8 | 9 | Unfortunately; this summary is less successful -- I meant to contact the 10 | students immediately after the summer, but that mail never went through and 11 | I failed to follow up on it -- my apologies. 12 | 13 | In either case, I still wanted to list the successful projects here for 14 | posterirty. I reached out to the students again and will be updating this 15 | post with more information and quotes as they get back to me. 16 | 17 | 1. **A language server for Dhall** 18 | Student: [Frederik Ramcke](https://github.com/EggBaconAndSpam/eggbaconandspam.github.io/blob/master/posts/2019-08-22-final-report.md) 19 | Mentors: Luke Lau, Gabriel Gonzalez 20 | 21 | 2. **A stronger foundation for interactive Haskell tooling** 22 | Student: dxld 23 | Mentors: Alan Zimmerman, Matthew Pickering 24 | 25 | 3. **Automated requirements checking as a GHC plugin** 26 | Student: [Daniel Marshall](https://starsandspira.ls/gsoc.html) 27 | Mentors: Chris Smith, chessai, Alphalambda 28 | 29 | 4. **Extending Alga** 30 | Student: [O V Adithya Kumar](https://adithyaov.github.io/) 31 | Mentors: Andrey Mokhov, Jasper Van der Jeugt, Alexandre Moine 32 | 33 | 5. **Extending Hasktorch With RNNs and Encoder-Decoder** 34 | Student: AdLucem 35 | Mentors: Austin Huang, Junji Hashimoto, Sam Stites 36 | 37 | 6. **Functional Machine Learning with Hasktorch: Produce Functional Machine 38 | Learning Model Reference Implementations** 39 | Student: Jesse Sigal 40 | Mentors: Austin Huang, idontgetoutmuch, Junji Hashimoto, Sam Stites 41 | 42 | 7. **Hadrian Optimisation** 43 | Student: ratherforky 44 | Mentors: Andrey Mokhov, Neil Mitchell 45 | 46 | 8. **Implementing Chebyshev polynomial approximations in Haskell: Having the 47 | speed and precision of numerics with complex, non-polynomial functions.** 48 | Student: [Deifilia To](https://www.cs.mcgill.ca/~dto4/projects/gsoc.html) 49 | Mentors: tmcdonell, idontgetoutmuch, Albert Krewinkel 50 | 51 | 9. **Improving Hackage Matrix Builder as a Real-world Fullstack Haskell 52 | Project** 53 | Student: Andika Riyandi (Rizary) 54 | Mentors: Herbert Valerio Riedel, Robert Klotzner 55 | 56 | 10. **Improving HsYAML Library** 57 | Student: [Vijay Tadikamalla](https://vijayphoenix.github.io/blog/gsoc-the-conclusion/) 58 | Mentors: Herbert Valerio Riedel, Michał Gajda 59 | 60 | 11. **Issue-Wanted Web Application** 61 | Student: Rashad Gover 62 | Mentors: Veronika Romashkina, Dmitrii Kovanikov 63 | 64 | 12. **More graph algorithms for Alga** 65 | Student: [Vasily Alferov](/news/2019-08-26-alga-results.html) 66 | Mentors: Andrey Mokhov, Alexandre Moine 67 | 68 | 13. **Property-based testing stateful programs using 69 | quickcheck-state-machine** 70 | Student: Kostas Dermentzis 71 | Mentors: stevana, Robert Danitz 72 | 73 | 14. **Putting hie Files to Good Use** 74 | Student: Zubin Duggal 75 | Mentors: Alan Zimmerman, Matthew Pickering 76 | 77 | 15. **Upgrading hs-web3 library** 78 | Student: amany9000 79 | Mentors: Alexander Krupenkin, Thomas Dietert 80 | 81 | Thanks to everyone involved! 82 | 83 | [Google Summer of Code]: https://summerofcode.withgoogle.com/ 84 | [Haskell.org]: https://haskell.org 85 | -------------------------------------------------------------------------------- /content/news/2020-01-12-call-for-ideas.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Call for Ideas for 2020' 3 | author: 'Jasper Van der Jeugt' 4 | --- 5 | 6 | [Google Summer of Code] will take place again in 2020! 7 | 8 | [Haskell.org] has been able to take part in this program in the past two years, 9 | and we'd like to keep this momentum up since it greatly benefits the community. 10 | 11 | Google is not extremely open about what factors it considers for applications 12 | from organizations, but they have stated multiple times that a well-organized 13 | ideas list is crucial. For that, we would like to count on all of you again. 14 | 15 | If you are the maintainer or a user of a Haskell project, and you have an 16 | improvement in mind which a student could work on during the summer, please 17 | submit an idea here: 18 | 19 | 20 | 21 | For context, Google Summer of Code is a program where Google sponsors students 22 | to work on open-source projects during the summer. Haskell.org has taken part 23 | in this program in 2006-2015, and 2018-2019. Many important improvements to 24 | the ecosystem have been the direct or indirect result of Google Summer of Code 25 | projects, and it has also connected new people with the existing community. 26 | 27 | Projects should benefit as many people as possible – e.g. an improvement to GHC 28 | will benefit more people than an update to a specific library or tool, but both 29 | are definitely valid. New libraries and applications written in Haskell, rather 30 | than improvements to existing ones, are also accepted. Projects should be 31 | concrete and small enough in scope such that they can be finished by a student 32 | in three months. Past experience has shown that keeping projects "small" is 33 | almost always a good idea. 34 | 35 | [Google Summer of Code]: https://summerofcode.withgoogle.com/ 36 | [Haskell.org]: https://haskell.org 37 | -------------------------------------------------------------------------------- /content/news/2020-10-12-final-results.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Haskell.org GSoC results for 2020' 3 | author: 'Jasper Van der Jeugt' 4 | --- 5 | 6 | [Haskell.org] took part in [Google Summer of Code] again in 2020. Despite 7 | unfortunately receiving less slots from Google this year, we had a number of 8 | highly successful projects. In this blogpost, I've collected all write-ups and 9 | reports from the students for your convenience. 10 | 11 | 1. **SPECIALIZABLE GHC pragma** 12 | Student: Francesco Gazzetta @fgaz 13 | Mentors: Carter Schonwald, Andreas Klebinger, chessai 14 | [Student report](https://github.com/fgaz/gsoc/blob/master/2020/report.md) 15 | 16 | 2. **Add primops to expand the (boxed) array API** 17 | Student: buggymcbugfix 18 | Mentors: andrewthad, Andreas Klebinger, chessai 19 | [Student report](https://github.com/buggymcbugfix/not-not-a-blog/blob/master/blog/2020-08-28-gsoc/post.md) 20 | 21 | 3. **Build-integration and Badges for Hackage** 22 | Student: Shubham Awasthi 23 | Mentors: hvr, Gershom Bazerman 24 | [Student report](https://awasthishubh.github.io/gsoc-2020-haskell/report.html) 25 | 26 | 4. **Building the Haskell Language Server and more** 27 | Student: Luke Lau 28 | Mentors: Alan Zimmerman, Pepe Iborra, Zubin Duggal 29 | [Student report](https://gist.github.com/bubba/22719e8854c728bc726d1a6cfb9ded81) 30 | 31 | 5. **Custom Dataloader for Hasktorch** 32 | Student: Andre Daprato 33 | Mentors: Austin Huang, Adam Paszke, Torsten Scholak, Junji Hashimoto 34 | 35 | 6. **Documentation generator for the Dhall configuration language** 36 | Student: German Robayo 37 | Mentors: Profpatsch, Gabriel Gonzalez, sjakobi 38 | [Student report](https://dev.to/german1608/season-finale-dhall-documentation-generator-2lfn) 39 | 40 | 7. **Finish the package candidate workflow for Hackage** 41 | Student: Sitao Chen 42 | Mentors: hvr, Gershom Bazerman 43 | [Student report](https://sitaochen.github.io/hackage-server/) 44 | 45 | > This summer, I have participated in Google Summer of Code with Haskell 46 | > org and worked on Hackage candidate UI and workflow. Without previous 47 | > experience in open source development, I was able to grasp a large 48 | > codebase and its structure in a short period with the help of my 49 | > mentors. Besides, I got a chance to learn about how to make API calls 50 | > and how to improve UI using Haskell in a formal setting. This 51 | > experience helps me have a better understanding of packages workflow 52 | > management and web services in Haskell. I wish I can contribute again 53 | > in the future! 54 | 55 | 8. **Functional Machine Learning Algorithms for Music Generation** 56 | Student: Elizabeth Wilson 57 | Mentors: Alex McLean, Austin Huang, Torsten Scholak 58 | [Student report](https://blog.tidalcycles.org/autonomous-live-coding-summer-of-haskell-project/) 59 | 60 | 9. **Multiple Home Packages for GHC** 61 | Student: fendor 62 | Mentors: Zubin Duggal, John Ericson, Matthew Pickering 63 | [Student report](https://mpickering.github.io/ide/posts/2020-10-12-multiple-home-units.html) 64 | 65 | > Haskell IDE Engine was the first open source project I ever contributed 66 | > to, and over time, it became of a project of passion for me. Over the 67 | > months I dove deeper into Haskell tooling, until I got the chance to work 68 | > on GHC itself in this year's Google Summer of Code! I worked on this 69 | > project to improve the tooling situation for Haskell, as well as improving 70 | > the IDE experience by implementing features needed by both. 71 | > 72 | > The project itself proved to be challenging, mainly because of my 73 | > unfamiliarity with the GHC code base. However, with the help of my helpful 74 | > mentors, I was able to overcome the challenges and learned a lot about 75 | > GHC. I am glad I had the chance to work on this project, although I did 76 | > not accomplish everything I wanted to, yet. 77 | 78 | 10. **Number Field Sieves** 79 | Student: Federico Bongiorno 80 | Mentors: Sergey Vinokurov, Andrew Lelechenko 81 | [Student report](https://github.com/folidota/GSoC2020/blob/master/GSoC2020/NumberFieldSieves.pdf) 82 | 83 | 11. **Optimising Haskell developer tool performance using OpenTelemetry** 84 | Student: Michalis Pardalos 85 | Mentors: Dmitry Ivanov, Matthew Pickering 86 | 87 | > My project was about adding support for opentelemetry tracing into ghcide, 88 | > the core component of haskell-language-server. I had very little 89 | > experience with open-source development, or the internals of haskell 90 | > and ghc before this project and I can say for sure that this has 91 | > changed. Aside from working on ghcide itself, I also had to submit patches 92 | > to haskell-opentelemetry, implementing features necessary for this 93 | > project. When the project was blocked by a ghc bug, I also took this as an 94 | > opportunity to dive into ghc and fix it myself, which I found incredibly 95 | > rewarding and consider a valuable experience. 96 | > 97 | > Even though I ended up running out of time and not finishing everything 98 | > I hoped for in the project, I can say for sure that it was a positive 99 | > experience which I would absolutely recommend. 100 | 101 | 12. **Update stylish-haskell to use ghc-lib-parser** 102 | Student: Beatrice Vergani 103 | Mentors: Jasper Van der Jeugt, lukaszgolebiewski, Paweł Szulc 104 | [Student report](https://www.beatricevergani.com/posts/gsoc2020/) 105 | 106 | Google will be hosting GSoC again in 2021, and of course we plan to apply again. 107 | If you have ideas for projects that students could work on, we'll be using the 108 | same format as the years before -- [this page](/ideas.html) has more information 109 | on how to submit an idea. 110 | 111 | Thanks a lot to everyone involved! 112 | 113 | [Google Summer of Code]: https://summerofcode.withgoogle.com/ 114 | [Haskell.org]: https://haskell.org 115 | -------------------------------------------------------------------------------- /content/news/2021-09-23-final-results.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Haskell.org GSoC results for 2021' 3 | author: 'Jasper Van der Jeugt' 4 | --- 5 | 6 | [Google Summer of Code] made some changes this year: projects were effectively 7 | part-time projects. This means that the projects had to be somewhat smaller in 8 | scope. We only received 10 slots from Google this year; which is fewer than 9 | last year. 10 | 11 | Despite that, all our 10 slots were successful! This is the first that has 12 | happened in the history of [Haskell.org]'s participation in the program. 13 | Some of these are high-profile and will benefit a lot of users in the ecosystem, 14 | which is super exciting. 15 | 16 | 1. **Enhanced figure support in pandoc** 17 | Student: Aner Lucero 18 | Mentors: tarleb 19 | [Student report](https://argent0.github.io/posts/2021/pandoc-gsoc.html) 20 | 21 | > Google summer of code was a great way to expand my involvement with the 22 | > haskell community and to test my knowledge working on one of haskell's 23 | > most used apps. 24 | 25 | 2. **Gradually Typed Hasktorch** 26 | Student: Julius Marozas 27 | Mentors: Torsten Scholak 28 | [Student report](https://gist.github.com/jul1u5/7c5fadb51a9c5f8d7f2a722d6071c1da) 29 | 30 | 3. **Dhall bindings to TOML configuration language** 31 | Student: Marcos Lerones 32 | Mentors: Gabriella Gonzalez, Simon Jakobi 33 | [Student report](https://dev.to/marcosjlr/google-summer-of-code-summary-dhall-bindings-to-csv-4g0f) 34 | 35 | 4. **Haskell in CodeMirror 6** 36 | Student: Olivian Cretu 37 | Mentors: Chris Smith 38 | [Student repo](https://github.com/odc19/haskell_code_mirror) 39 | 40 | 5. **Fixing ihaskell-widgets** 41 | Student: David Davó 42 | Mentors: James Brock, Vaibhav Sagar 43 | [Student report](https://gsoc21.ddavo.me/) 44 | 45 | > Three years ago, I started learning Haskell and functional programming. As 46 | > I had recently started using Jupyter Notebooks in other projects, I wanted 47 | > to try using them with Haskell to take notes and do the course homework. A 48 | > few weeks in, I noticed I couldn't use the widgets, but I didn't give it 49 | > much thought. Three years later, this summer, I've had the opportunity to 50 | > fix it, while learning a lot in the process. 51 | > 52 | > That's what open source is about. 53 | 54 | 6. **TidalCycles API and editor plugin** 55 | Student: Martin Gius 56 | Mentors: Alex McLean 57 | [Student report](https://github.com/polymorphicengine/tidal-gui/blob/main/README.md) 58 | 59 | 7. **Haskell Language Server: Symbol Renaming** 60 | Student: Oliver Madine 61 | Mentors: Pepeiborra 62 | [Student report](https://gist.github.com/OliverMadine/96927f88b6e5e7890e5179559089166c) 63 | 64 | > Working on the Haskell Language Server (HLS) was my first time using 65 | > Haskell in production. While navigating through different areas of the 66 | > tooling infrastructure, the community was supportive in helping me develop 67 | > my understanding. 68 | > 69 | > Specifically, my project involved exploring hie-bios and the GHC API to 70 | > create a symbol renaming plugin. Overall, the work was engaging, and I was 71 | > able to substantially improve my development skills with the help of my 72 | > mentor! 73 | 74 | 8. **Support call hierarchy in Haskell Language Server** 75 | Student: Lei Zhu 76 | Mentors: Javier Neira, Pepeiborra 77 | [Student report](https://github.com/July541/GSoC-2021) 78 | 79 | > Haskell community is warm and friendly to everyone, no matter you are 80 | > a beginner or an expert. This summer, I am more familiar with 81 | > haskell-language-server and GHC itself. Thank haskell.org and GSoC 82 | > for providing this opportunity! 83 | 84 | 9. **Visualization Libraries for ghc-debug** 85 | Student: Ethan Tsz Hang Kiang 86 | Mentors: Matthew Pickering 87 | [Student report](https://zyklotomic.github.io/blog/gsoc_2021_final_eval.html) 88 | 89 | 10. **TOML Support in dhall-haskell** 90 | Student: Julio Grillo 91 | Mentors: Gabriella Gonzalez, Simon Jakobi 92 | [Student report](https://gist.github.com/ear7h/78265c4755adc01fa6e6a19e3307ef4d) 93 | 94 | We hope that Google hosts the program in 2022; and in that case we plan to apply 95 | again. If you have ideas for projects that students could work on, we'll be 96 | using the same format as the years before -- [this page](/ideas.html) has more 97 | information on how to submit an idea. 98 | 99 | Thanks a lot to everyone involved! 100 | 101 | [Google Summer of Code]: https://summerofcode.withgoogle.com/ 102 | [Haskell.org]: https://haskell.org 103 | -------------------------------------------------------------------------------- /content/news/2022-02-01-gsoc-changes-2022.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Google Summer of Code in 2022' 3 | author: 'Ida Bzowska' 4 | --- 5 | 6 | Google Summer of Code (GSoC) is a global, online program focused on bringing new 7 | contributors to open-source software development. GSoC Contributors work with an 8 | open-source organization on a 12+ week programming project under the guidance of 9 | mentors. As in previous years, Haskell.org will be applying to join this 10 | program as open-source organization. However, some changes have been made! 11 | 12 | ![GSoC Banner](/images/2022-02-01-gsoc.png) 13 | 14 | # Who can join 15 | 16 | In 2022, the program will be addressed to all newcomers of open source that are 17 | 18 years and older. GSoC will no longer be solely focused on university students 18 | or recent graduates - people that are at various stages of their career, recent 19 | career changers, self-taught, those returning to the workforce, etc., are 20 | welcome to join. Those changes should better fulfill the needs of open source 21 | communities and provide more flexibility to both projects and contributors. 22 | 23 | # Time frames 24 | 25 | Organizers are aware that not everyone can devote an entire summer to 26 | coding. Offered projects are available in multiple sizes: medium (~175 hours) 27 | and large (~350 hours). There's an availability to join a 12-week program or 28 | extend the deadline - up to 22 weeks. 29 | 30 | # Projects ideas submissions 31 | 32 | Are you working on a Haskell project, and you could use the help of a student 33 | during the summer? Consider contributing it as an idea here! Send a pull request 34 | to our [github repository](https://github.com/haskell-org/summer-of-haskell) 35 | ([example from 2020](https://github.com/haskell-org/summer-of-haskell/blob/ba41af89efe18a2383163e80156cc900e443e461/content/ideas/stylish-haskell-ghc-lib-parser.md)). 36 | If you just want to discuss a possible idea, don't hesitate to 37 | [get in touch with us](/contact.html) 38 | or/and read through the 39 | [student/contributor guide](https://google.github.io/gsocguides/). 40 | 41 | # Resources 42 | 43 | We encourage you to explore 44 | [GSoC's webpage](https://summerofcode.withgoogle.com/), 45 | and you can learn more on the 46 | [FAQ website](https://developers.google.com/open-source/gsoc/faq). 47 | All the updates about this year's GSoC edition can be found in 48 | [this blogpost](https://opensource.googleblog.com/2021/11/expanding-google-summer-of-code-in-2022.html). 49 | 50 | # TL;DR 51 | 52 | GSoC 2022: OSS projects, developed during Summer (from June to 53 | September/November) for newcomers that are 18 years and older and want to spend 54 | 175 - 350 hours on coding activities, with a mentor's support. 55 | -------------------------------------------------------------------------------- /content/news/2023-05-14-summer-of-haskell-2023-project-selections.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Summer of Haskell 2023 Project Selections' 3 | author: 'Aaron Allen' 4 | --- 5 | 6 | Summer of Haskell 2023 is off to a great start and we have some exciting news 7 | to share! We received many quality proposals from which to choose and our 8 | mentors have made their selections. Thanks to our [incredibly generous sponsors](/index.html#sponsors), 9 | we have secured funding for nine projects! Without further ado, here are the 10 | accepted projects: 11 | 12 | - [Cabal file support for HLS](#cabal-file-support-for-hls) 13 | - [Implement Resolution Methods in HLS](#implement-resolution-methods-in-hls) 14 | - [Goto Definition for Third-Party Libraries in HLS](#goto-definition-for-third-party-libraries-in-hls) 15 | - [Teaching Weeder About Type Class Instances](#teaching-weeder-about-type-class-instances) 16 | - [Standardize GHC’s Error Dump in JSON Format](#standardize-ghcs-error-dump-in-json-format) 17 | - [Maximally Decoupling Haddock and GHC](#maximally-decoupling-haddock-and-ghc) 18 | - [Representing Pattern](#representing-pattern) 19 | - [Improving Calligraphy](#improving-calligraphy) 20 | - [Structured Errors and Error Codes for cabal-install](#structured-errors-and-error-codes-for-cabal-install) 21 | 22 | # Cabal file support for HLS 23 | Contributor: Jana Chadt 24 | Mentor: Fendor 25 | Abstract: 26 | 27 | > The goal of this proposal is to provide cabal file support for Haskell Language 28 | > Server. I have been working on the cabal plugin for Haskell Language server 29 | > during various Hackathons since 2021, implementing 30 | > [formatting](https://github.com/haskell/haskell-language-server/pull/2047) and 31 | > [code-completion](https://github.com/haskell/haskell-language-server/pull/3268) 32 | > of cabal files and I would like to be able to commit to working on the plugin 33 | > full time this summer. 34 | 35 | # Implement Resolution Methods in HLS 36 | Contributor: Nathan Maxson 37 | Mentor: Michael Peyton Jones 38 | Abstract: 39 | 40 | > With “codeAction/resolve” and “codeLens/reslove” the language server protocol 41 | > has added methods to allow language servers to delay some of the work it needs 42 | > to do for codeActions and codeLens until it is actually needed, allowing the 43 | > server significant savings in both memory and cpu usage. This proposal is to 44 | > add both of these methods to the haskell-language-server, allowing plugins to 45 | > call them at will. In addition I propose adding support for the resolve methods 46 | > to some haskell language server’s plugins. 47 | 48 | # Goto Definition for Third-Party Libraries in HLS 49 | Contributor: Elodie Lander 50 | Mentor: Zubin Duggal 51 | Abstract: 52 | 53 | > Making goto definition work for third party libraries is of interest to me as a 54 | > Haskell developer because it is a feature I would like to use in my Haskell 55 | > development. In fact, it is the feature that might finally motivate me to use 56 | > HLS in my own projects. My Haskell workflow has usually involved a lot of 57 | > switching back and forth between my editor and Hackage documentation in the 58 | > browser. I believe that being able to see third party library definitions in my 59 | > editor would reduce this back and forth significantly and help increase my 60 | > efficiency as a Haskell developer. 61 | 62 | # Teaching Weeder About Type Class Instances 63 | Contributor: Vasily Sterekhov 64 | Mentor: Ollie Charles 65 | Abstract: 66 | 67 | > A frequent complaint about Haskell is the lack of tooling. This proposal aims 68 | > to contribute to improving the situation by addressing a particular limitation 69 | > of Weeder, a tool for detecting dead code. In the process, this may involve 70 | > proposing minor additions to hie files to GHC, which may benefit other similar 71 | > projects working in the same area. 72 | 73 | # Standardize GHC’s Error Dump in JSON Format 74 | Contributor: Ben Bellick 75 | Mentor: Aaron Allen 76 | Abstract: 77 | 78 | > GHC is currently undergoing a long scale project to move to a more structured 79 | > error representation by treating errors as values. An additional useful feature 80 | > that can be made available is to dump a JSON representation of warnings/errors. 81 | > An experimental implementation of this feature exists when GHC is invoked with 82 | > -ddump-json, although this is an unfinished command which suffers from the 83 | > following: 84 | > 85 | > - it is non-standardized 86 | > - it does not leverage new structured error representation 87 | > - previous implementation issues led to a hard-coding of output to stdout 88 | > 89 | > There is an opportunity to benefit consumers of GHC output and to improve Haskell 90 | > tooling infrastructure. Some examples of possible use-cases for down stream 91 | > consumers can be found 92 | > [here](https://gitlab.haskell.org/ghc/ghc/-/issues/19278). Not all consumers of 93 | > Haskell’s error messages intend on doing so via the GHC API, and such a 94 | > standardized JSON output enables a larger set of developers to expand the error 95 | > tooling in the Haskell ecosystem. I am also personally excited to help with 96 | > this project because I love Haskell and want to make a contribution to one of 97 | > its crowning achievements–GHC. I am especially interested in any improvements 98 | > which enable outside consumers to better understand/process the internals of 99 | > the compiler. 100 | 101 | # Maximally Decoupling Haddock and GHC 102 | Contributor: Gregory Baimetov 103 | Mentor: Laurent P. René de Cotret 104 | Abstract: 105 | 106 | > In practice, development and usage of Haddock is strongly coupled to the 107 | > internals of the Glasgow Haskell Compiler (GHC). One concrete example of this 108 | > coupling is the fact that Haddock makes use of the GHC parser itself. 109 | > Therefore, if Haddock was compiled using GHC version X, it might not be able to 110 | > parse the source code of a Haskell program written for GHC version Y > X. 111 | > 112 | > This strong coupling between GHC and Haddock slows down Haddock development and 113 | > prevents Haddock from being better integrated in other tools, such as Hackage, 114 | > the Haskell Language Server, or Hoogle. 115 | 116 | # Representing Pattern 117 | Contributor: Saachi Kaup 118 | Mentor: Alex McLean 119 | Abstract: 120 | 121 | > Using Haskell’s advanced type system to map the structures in Tidal Cycles to 122 | > the underlying shapes of Mandala art and produce beautiful visualisations. 123 | 124 | # Improving Calligraphy 125 | Contributor: Dominic Mills 126 | Mentor: Luis Morillo Najarro 127 | Abstract: 128 | 129 | > Calligraphy, a tool for visualizing Haskell projects, faces the challenges of 130 | > developing and maintaining Haskell tooling due to the constantly evolving 131 | > nature of the language and its implementation in GHC. 132 | > 133 | > In light of these challenges, the primary aim of this Summer of Haskell project 134 | > is to enhance the Calligraphy tool to provide visualizations that are both 135 | > simple and easy to use. This will be done by modularizing the Calligraphy tool 136 | > into its various parts such as the calligraphy-gui, calligraphy-graphviz, 137 | > calligraphy-cli, and calligraphy-fgl. In addition to keeping it up-to-date with 138 | > GHC releases. 139 | 140 | # Structured Errors and Error Codes for cabal-install 141 | Contributor: Suganya Arun 142 | Mentor: Gershom Bazerman 143 | Abstract: 144 | 145 | > The https://errors.haskell.org/ site provides an index that maps error codes in 146 | > haskell tooling to documentation. GHC, ghcup, and stack have all begin to 147 | > implement support for structured errors that have assigned codes. This project 148 | > is to refactor the cabal codebase to also provide structured errors rather than 149 | > mere strings, and also assign cabal errors corresponding codes that can be 150 | > added to the error index. 151 | -------------------------------------------------------------------------------- /content/news/2024-01-20-summer-of-haskell-2023-results.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Summer of Haskell 2023 Results' 3 | author: 'Aaron Allen' 4 | --- 5 | 6 | On behalf of the Haskell.org committee, I'm pleased to announce the results of 7 | the Summer of Haskell 2023. Many impressive and valuable contributions were 8 | made to the Haskell ecosystem which I'm excited to share with you in this post. 9 | I'd like to extend a big thank you to the sponsors that made this program 10 | possible: [The Haskell Foundation](https://haskell.foundation/), 11 | [Kadena](https://www.kadena.io/), [Jane Street](https://www.janestreet.com/), 12 | [Holmusk](https://www.holmusk.com/), [MLabs](https://mlabs.city/), 13 | [Flipstone](https://flipstone.com/), Gershom Bazerman, and Edward Kmett. 14 | Gratitude is also due to the wonderful mentors who kindly donated their time to 15 | helping bring these projects to fruition and fostering the next generation of 16 | Haskellers. 17 | 18 | I also want to mention that [we are currently in need of idea 19 | submissions](https://summer.haskell.org/ideas.html) for the upcoming Google 20 | Summer of Code 2024! This program depends on having a quality list of ideas, so 21 | please consider submitting any you might have (ideally before Feb. 4th). 22 | 23 | Without further ado, what follows is a summary of the work that was completed 24 | under the Summer of Haskell 2023. 25 | 26 | --- 27 | 28 | 29 | 30 | 31 | 32 |
ProjectSupport for Resolve Functionality in HLS
Contributor Nathan Maxson
MentorMichael Peyton Jones
33 | 34 | Nathan Maxson contributed support for [resolve 35 | functionality](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#codeAction_resolve) 36 | to [HLS](https://haskell-language-server.readthedocs.io/en/latest/#). He has 37 | also updated a number of HLS plugins to utilize this functionality, thus 38 | reducing CPU and memory usage and improving speed. The plugins that have been 39 | updated in this way are `overloaded-record-dot`, `hlint-plugin`, 40 | `explicit-imports`, `refine-imports`, `type-lenses`, `explicit-records`, and 41 | `class-plugin`. 42 | 43 | Relevant code contributions 44 | 45 | * 46 | * 47 | * 48 | * 49 | * 50 | * 51 | * 52 | * 53 | * 54 | * 55 | 56 | --- 57 | 58 | 59 | 60 | 61 | 62 |
ProjectCabal File Support for HLS
Contributor Jana Chadt
MentorFendor
63 | 64 | Jana Chadt worked on improving support for Cabal files in HLS. The work has 65 | been summarized in [this 66 | gist](https://gist.github.com/VeryMilkyJoe/268448ff8daea9f467930c771e60b9c8), 67 | which includes links to relevant PRs and issues. There is also [a blog 68 | post](https://discourse.haskell.org/t/hsoc-hls-cabal-file-support/7331) 69 | detailing the new HLS functionality. 70 | 71 | Relevant code contributions 72 | 73 | * 74 | * 75 | * 76 | * 77 | * 78 | 79 | --- 80 | 81 | 82 | 83 | 84 | 85 |
ProjectHLS: Goto 3rd Party Definition
Contributor Elodie Lander
MentorZubin Duggal
86 | 87 | Elodie Lander worked on allowing the HLS goto definition functionality to work 88 | with definitions from outside of the current project. Although primarily 89 | focused on HLS, this work involves contributions to other key Haskell 90 | infrastructure: GHC, Cabal, HieDb, and haskell/actions. 91 | 92 | Relevant code contributions 93 | 94 | * 95 | * 96 | * 97 | * 98 | * 99 | * 100 | * 101 | * 102 | * 103 | * 104 | * 105 | 106 | --- 107 | 108 | 109 | 110 | 111 | 112 |
ProjectStandardize GHC's Error Dump in JSON Format
Contributor Ben Bellick
MentorAaron Allen
113 | 114 | Ben Bellick contributed a new [well-defined JSON interface for GHC diagnostic 115 | emissions](https://github.com/benbellick/tech-proposals/blob/specify-json-dump/proposals/0000-specify-dump-json.md), 116 | which will be available via a new `-fdiagnostics-as-json` flag. The existing 117 | under-specified `-ddump-json` flag has been deprecated in favor of this new 118 | interface. Additionally, Ben made valuable contributions to the effort of 119 | converting GHC error messages to use the new structured representation. 120 | 121 | Relevant code contributions 122 | 123 | * 124 | * 125 | 126 | --- 127 | 128 | 129 | 130 | 131 | 132 |
ProjectTeaching Weeder About Type Classes
Contributor Vasily Sterekhov
MentorOliver Charles
133 | 134 | Vasily Sterekhov implemented support for detecting unused type class instances 135 | in [Weeder](https://github.com/ocharles/weeder?tab=readme-ov-file#weeder), 136 | along with several other significant improvements. See the [Weeder 2.7 release 137 | notes](https://discourse.haskell.org/t/weeder-2-7-released-with-type-class-instances-and-more/7356) 138 | for details. 139 | 140 | Relevant code contributions 141 | 142 | * 143 | * 144 | * 145 | * 146 | * 147 | * 148 | * 149 | 150 | --- 151 | 152 | 153 | 154 | 155 | 156 |
ProjectStructured Errors for cabal-install
Contributor Suganya Arun
MentorGershom Bazerman
157 | 158 | Suganya Arun implemented structured errors for Cabal, including the assignment 159 | of a unique code to each error which can be then be referenced on the [Haskell 160 | Error Index](https://errors.haskell.org/). You can read more about the results 161 | and challenges of the project in [this blog 162 | post](https://summerofhaskellstructerrors.blogspot.com/2023/10/soh2023-structured-errors-and-error.html). 163 | 164 | Relevant code contributions 165 | 166 | * 167 | * 168 | * 169 | * 170 | * 171 | * 172 | * 173 | 174 | --- 175 | 176 | 177 | 178 | 179 | 180 |
ProjectMaximally Decoupling Haddock and GHC
Contributor Gregory Baimetov
MentorLaurent P. Rene de Cotret
181 | 182 | Gregory Baimetov contributed to the effort towards [decoupling GHC and 183 | Haddocks](https://github.com/haskellfoundation/tech-proposals/pull/44). 184 | Although the original goal proved to be too ambitious, he has produced a 185 | [prototype of a JSON serialization for the Haskell 186 | AST](https://github.com/Greg8128/proto-docser-hs) as well as a [document 187 | explaining the difficulties 188 | encountered](https://docs.google.com/document/d/1nykZgSi9k_jP1N4ZVZhSdce2jFpRdwNNT3X2YQLF9vo), 189 | which should be of value to future work on this issue. 190 | 191 | --- 192 | 193 | 194 | 195 | 196 | 197 |
ProjectRepresenting Pattern
Contributor Saachi Kaup
MentorAlex Mclean
198 | 199 | Saachi Kaup worked with various libraries to explore pattern visualization, 200 | drawing connections to the traditional mandalas common in Southeast Asian art. 201 | She put together [a blog post on the Tidal 202 | website](https://tidalcycles.org/blog/blog_topic_mandalas) describing her 203 | process and showcasing some of the images that were produced. You can also view 204 | the [code repository](https://gitlab.com/Saachi_Kaup/TurtlePatterns). 205 | -------------------------------------------------------------------------------- /content/news/2024-12-08-summer-of-haskell-2024-results.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Summer of Haskell 2024 Results' 3 | author: 'Aaron Allen' 4 | --- 5 | 6 | Another Google Summer of Code has come and gone and we were thrilled to take part! 7 | 8 | [Please see our post on blog.haskell.org for a summary of the results.](https://blog.haskell.org/gsoc-2024/) 9 | -------------------------------------------------------------------------------- /content/tips.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Tips 3 | --- 4 | 5 | # Tips for writing a good proposal 6 | 7 | Some general tips on writing a proposal are discussed 8 | [in Google's official guide](https://google.github.io/gsocguides/student/writing-a-proposal). 9 | 10 | - **The most important thing** that we look for in proposals is that you 11 | understand the project. You can show this by describing how you would 12 | approach the implementation. Quality is more important than quantity, 13 | this doesn't need to be longer than a page. 14 | 15 | - What interests you in the project? 16 | 17 | - Please include a tentative plan or schedule with some milestones. 18 | If you have existing commitments, such as university deadlines, please 19 | communicate this clearly! We can usually work around these, but we don't 20 | want you disapearing without a word for two weeks. 21 | 22 | - Feel free to provide a brief CV, but please keep it limited to the 23 | experience that is relevant for GSoC. If you have contributed to Haskell 24 | projects in the past, please include this! 25 | 26 | If you don't fully understand the project yet -- **no problem**! We welcome 27 | new people, and mentors are happy to answer questions or give you feedback on 28 | proposal drafts. [Let us know](/contact.html) if you want us to put you in 29 | touch with the relevant mentors. 30 | -------------------------------------------------------------------------------- /deploy.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | set -o errexit -o pipefail -o nounset 3 | 4 | mkdir -p summer.haskell.org/ 5 | sshfs hsoc-site@webhost.haskell.org: summer.haskell.org/ 6 | trap "fusermount -u $PWD/summer.haskell.org" EXIT 7 | cp -rv _site/* summer.haskell.org/htdocs/ 8 | -------------------------------------------------------------------------------- /images/2022-02-01-gsoc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haskell-org/summer-of-haskell/3c9efd21fc0022f7b9c21ac2001ca1049d888dc9/images/2022-02-01-gsoc.png -------------------------------------------------------------------------------- /images/asahi-net-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haskell-org/summer-of-haskell/3c9efd21fc0022f7b9c21ac2001ca1049d888dc9/images/asahi-net-logo.png -------------------------------------------------------------------------------- /images/awake-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haskell-org/summer-of-haskell/3c9efd21fc0022f7b9c21ac2001ca1049d888dc9/images/awake-logo.png -------------------------------------------------------------------------------- /images/awake-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /images/codeworld-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haskell-org/summer-of-haskell/3c9efd21fc0022f7b9c21ac2001ca1049d888dc9/images/codeworld-logo.png -------------------------------------------------------------------------------- /images/company-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haskell-org/summer-of-haskell/3c9efd21fc0022f7b9c21ac2001ca1049d888dc9/images/company-logo.png -------------------------------------------------------------------------------- /images/digital-asset-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haskell-org/summer-of-haskell/3c9efd21fc0022f7b9c21ac2001ca1049d888dc9/images/digital-asset-logo.png -------------------------------------------------------------------------------- /images/facebook-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haskell-org/summer-of-haskell/3c9efd21fc0022f7b9c21ac2001ca1049d888dc9/images/facebook-logo.png -------------------------------------------------------------------------------- /images/fugue-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haskell-org/summer-of-haskell/3c9efd21fc0022f7b9c21ac2001ca1049d888dc9/images/fugue-logo.png -------------------------------------------------------------------------------- /images/galois-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haskell-org/summer-of-haskell/3c9efd21fc0022f7b9c21ac2001ca1049d888dc9/images/galois-logo.png -------------------------------------------------------------------------------- /images/gsoc-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | logo_lockup_summer_of_code_horizontal_Roboto 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /images/haskell-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haskell-org/summer-of-haskell/3c9efd21fc0022f7b9c21ac2001ca1049d888dc9/images/haskell-logo.png -------------------------------------------------------------------------------- /images/hsoc-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | logo_lockup_summer_of_code_horizontal_Roboto 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /images/iohk-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haskell-org/summer-of-haskell/3c9efd21fc0022f7b9c21ac2001ca1049d888dc9/images/iohk-logo.png -------------------------------------------------------------------------------- /images/pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haskell-org/summer-of-haskell/3c9efd21fc0022f7b9c21ac2001ca1049d888dc9/images/pattern.png -------------------------------------------------------------------------------- /images/tweag-io-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/haskell-org/summer-of-haskell/3c9efd21fc0022f7b9c21ac2001ca1049d888dc9/images/tweag-io-logo.png -------------------------------------------------------------------------------- /src/Main.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE OverloadedStrings #-} 2 | import Data.Monoid ((<>)) 3 | import Hakyll 4 | import System.FilePath (joinPath, splitPath, takeBaseName) 5 | import qualified Text.Pandoc as Pandoc 6 | import qualified Text.Pandoc.Walk as Pandoc.Walk 7 | 8 | main :: IO () 9 | main = hakyll $ do 10 | match "style/*.css" $ do 11 | route idRoute 12 | compile compressCssCompiler 13 | 14 | match "images/*" $ do 15 | route idRoute 16 | compile copyFileCompiler 17 | 18 | let simplePages = 19 | [ "content/index.md" 20 | , "content/faq.md" 21 | , "content/contact.md" 22 | , "content/tips.md" 23 | ] 24 | 25 | match (fromList simplePages) $ do 26 | route $ dropContentRoute `composeRoutes` setExtension "html" 27 | compile $ 28 | anchorsPandocCompiler >>= 29 | loadAndApplyTemplate "templates/default.html" defaultContext >>= 30 | relativizeUrls 31 | 32 | match "content/news/*" $ version "plain" $ 33 | -- A plain version just with the content. 34 | compile $ fmap demoteHeaders <$> pandocCompiler 35 | 36 | match "content/news/*" $ do 37 | route $ dropContentRoute `composeRoutes` setExtension "html" 38 | compile $ getUnderlying >>= newsPage . Just 39 | 40 | create ["content/news.html"] $ do 41 | route $ dropContentRoute `composeRoutes` setExtension "html" 42 | compile $ newsPage Nothing 43 | 44 | create ["news.xml"] $ do 45 | route idRoute 46 | compile $ 47 | loadAll ("content/news/*" .&&. hasVersion "plain") >>= 48 | fmap (take 10) . recentFirst >>= 49 | renderRss newsRssConfig newsRssContext 50 | 51 | match "content/ideas.html" $ do 52 | route $ dropContentRoute `composeRoutes` setExtension "html" 53 | compile $ 54 | getResourceString >>= 55 | applyAsTemplate ideasContext >>= 56 | loadAndApplyTemplate "templates/default.html" defaultContext >>= 57 | relativizeUrls 58 | 59 | match "content/ideas/*" $ compile $ 60 | pandocCompiler >>= 61 | return . fmap (demoteHeaders . demoteHeaders) 62 | 63 | match "templates/*" $ compile templateCompiler 64 | 65 | -- | Drop the `content/` part from a route. 66 | dropContentRoute :: Routes 67 | dropContentRoute = customRoute $ \ident -> 68 | let path0 = toFilePath ident in 69 | case splitPath path0 of 70 | "content/" : path1 -> joinPath path1 71 | _ -> path0 72 | 73 | -- | Our own pandoc compiler which adds anchors automatically. 74 | anchorsPandocCompiler :: Compiler (Item String) 75 | anchorsPandocCompiler = pandocCompilerWithTransform 76 | defaultHakyllReaderOptions 77 | defaultHakyllWriterOptions 78 | addAnchors 79 | 80 | -- | Modifie a headers to add an extra anchor which links to the header. This 81 | -- allows you to easily copy an anchor link to a header. 82 | addAnchors :: Pandoc.Pandoc -> Pandoc.Pandoc 83 | addAnchors = 84 | Pandoc.Walk.walk addAnchor 85 | where 86 | addAnchor :: Pandoc.Block -> Pandoc.Block 87 | addAnchor (Pandoc.Header level attr@(id_, _, _) content) = 88 | Pandoc.Header level attr $ content ++ 89 | [Pandoc.Link ("", ["anchor"], []) [Pandoc.Str "🔗"] ("#" <> id_, "")] 90 | addAnchor block = block 91 | 92 | -- | Context for an individual "idea". 93 | ideaContext :: Context String 94 | ideaContext = 95 | field "slug" (\item -> do 96 | return $ takeBaseName $ toFilePath $ itemIdentifier item) <> 97 | defaultContext 98 | 99 | -- | Context for the ideas page. 100 | ideasContext :: Context String 101 | ideasContext = 102 | listField "ideas" ideaContext (loadAll "content/ideas/*") <> 103 | defaultContext 104 | 105 | newsPage :: Maybe Identifier -> Compiler (Item String) 106 | newsPage mbIdent = 107 | makeItem "" >>= 108 | loadAndApplyTemplate "templates/news.html" (newsIndexContext focus) >>= 109 | loadAndApplyTemplate "templates/default.html" defaultContext >>= 110 | relativizeUrls 111 | where 112 | -- If 'mbIdent' is specified, use that news item, otherwise use the most 113 | -- recent one. 114 | focus = case mbIdent of 115 | Just i -> do 116 | item <- load (setVersion (Just "plain") i) 117 | return [item] 118 | Nothing -> do 119 | items <- loadAll ("content/news/*" .&&. hasVersion "plain") 120 | take 1 <$> recentFirst items 121 | 122 | newsContext :: Context String 123 | newsContext = 124 | dateField "date" "%B %e, %Y" <> 125 | field "url" (\item -> do 126 | -- We hijack/override the "url" field to get the "url" field of the 127 | -- item without a version instead. If we'd get the regular "plain" 128 | -- version, we would end up without a URL. 129 | mbRoute <- getRoute (setVersion Nothing $ itemIdentifier item) 130 | return $ maybe mempty toUrl mbRoute) <> 131 | defaultContext 132 | 133 | newsIndexContext :: Compiler [Item String] -> Context String 134 | newsIndexContext focus = 135 | listField "focus" newsContext focus <> 136 | listField "all" newsContext 137 | (loadAll ("content/news/*" .&&. hasVersion "plain") >>= recentFirst) <> 138 | defaultContext 139 | 140 | newsRssConfig :: FeedConfiguration 141 | newsRssConfig = FeedConfiguration 142 | { feedTitle = "Summer of Haskell News" 143 | , feedDescription = "Newest Summest of Haskell posts" 144 | , feedAuthorName = "Haskell.org committee" 145 | , feedAuthorEmail = "committee@haskell.org" 146 | , feedRoot = "http://summer.haskell.org" 147 | } 148 | 149 | newsRssContext :: Context String 150 | newsRssContext = bodyField "description" <> newsContext 151 | -------------------------------------------------------------------------------- /stack.yaml: -------------------------------------------------------------------------------- 1 | resolver: lts-19.17 2 | packages: 3 | - '.' 4 | extra-deps: 5 | - 'hakyll-4.15.1.1' 6 | nix: 7 | packages: 8 | - 'zlib' 9 | -------------------------------------------------------------------------------- /stack.yaml.lock: -------------------------------------------------------------------------------- 1 | # This file was autogenerated by Stack. 2 | # You should not edit this file by hand. 3 | # For more information, please see the documentation at: 4 | # https://docs.haskellstack.org/en/stable/lock_files 5 | 6 | packages: 7 | - completed: 8 | hackage: hakyll-4.15.1.1@sha256:f6164a8f011c2ea46c9b17da500c2b097c21674a6e8c16b0cfb76460942c7da8,9562 9 | pantry-tree: 10 | sha256: 69152c32f70df64dc7b307472e0a87b8446a61f3f0b7f3e62d080f1fad16e1f1 11 | size: 8861 12 | original: 13 | hackage: hakyll-4.15.1.1 14 | snapshots: 15 | - completed: 16 | sha256: 7f47507fd037228a8d23cf830f5844e1f006221acebdd7cb49f2f5fb561e0546 17 | size: 619161 18 | url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/19/17.yaml 19 | original: lts-19.17 20 | -------------------------------------------------------------------------------- /style/code.css: -------------------------------------------------------------------------------- 1 | a.sourceLine { display: inline-block; line-height: 1.25; } 2 | a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; } 3 | a.sourceLine:empty { height: 1.2em; } 4 | .sourceCode { overflow: visible; } 5 | code.sourceCode { white-space: pre; position: relative; } 6 | div.sourceCode { margin: 1em 0; } 7 | pre.sourceCode { margin: 0; } 8 | @media screen { 9 | div.sourceCode { overflow: auto; } 10 | } 11 | @media print { 12 | code.sourceCode { white-space: pre-wrap; } 13 | a.sourceLine { text-indent: -1em; padding-left: 1em; } 14 | } 15 | pre.numberSource a.sourceLine 16 | { position: relative; left: -4em; } 17 | pre.numberSource a.sourceLine::before 18 | { content: attr(title); 19 | position: relative; left: -1em; text-align: right; vertical-align: baseline; 20 | border: none; pointer-events: all; display: inline-block; 21 | -webkit-touch-callout: none; -webkit-user-select: none; 22 | -khtml-user-select: none; -moz-user-select: none; 23 | -ms-user-select: none; user-select: none; 24 | padding: 0 4px; width: 4em; 25 | color: #aaaaaa; 26 | } 27 | pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; } 28 | div.sourceCode 29 | { } 30 | @media screen { 31 | a.sourceLine::before { text-decoration: underline; } 32 | } 33 | code span.al { color: #ff0000; font-weight: bold; } /* Alert */ 34 | code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */ 35 | code span.at { color: #7d9029; } /* Attribute */ 36 | code span.bn { color: #40a070; } /* BaseN */ 37 | code span.bu { } /* BuiltIn */ 38 | code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */ 39 | code span.ch { color: #4070a0; } /* Char */ 40 | code span.cn { color: #880000; } /* Constant */ 41 | code span.co { color: #60a0b0; font-style: italic; } /* Comment */ 42 | code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */ 43 | code span.do { color: #ba2121; font-style: italic; } /* Documentation */ 44 | code span.dt { color: #902000; } /* DataType */ 45 | code span.dv { color: #40a070; } /* DecVal */ 46 | code span.er { color: #ff0000; font-weight: bold; } /* Error */ 47 | code span.ex { } /* Extension */ 48 | code span.fl { color: #40a070; } /* Float */ 49 | code span.fu { color: #06287e; } /* Function */ 50 | code span.im { } /* Import */ 51 | code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */ 52 | code span.kw { color: #007020; font-weight: bold; } /* Keyword */ 53 | code span.op { color: #666666; } /* Operator */ 54 | code span.ot { color: #007020; } /* Other */ 55 | code span.pp { color: #bc7a00; } /* Preprocessor */ 56 | code span.sc { color: #4070a0; } /* SpecialChar */ 57 | code span.ss { color: #bb6688; } /* SpecialString */ 58 | code span.st { color: #4070a0; } /* String */ 59 | code span.va { color: #19177c; } /* Variable */ 60 | code span.vs { color: #4070a0; } /* VerbatimString */ 61 | code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */ 62 | -------------------------------------------------------------------------------- /style/style.css: -------------------------------------------------------------------------------- 1 | html { 2 | background: white; 3 | margin: 0px; 4 | font-size: 16px; 5 | font-family: Ubuntu, Raleway, Helvetica, Arial, sans-serif; 6 | height: 100%; 7 | } 8 | 9 | body { 10 | margin: 0px; 11 | text-align: center; 12 | min-height: 100%; 13 | position: relative; 14 | } 15 | 16 | header { 17 | width: 100%; 18 | background-image: url('/images/pattern.png'); 19 | background-size: cover; 20 | background-repeat: repeat-y; 21 | color: #fff; 22 | font-size: 36px; 23 | padding: 24px 0px 0px 0px; 24 | } 25 | 26 | header img#haskell-logo { 27 | display: inline; 28 | height: 36px; 29 | margin-bottom: -4px; 30 | } 31 | 32 | header nav { 33 | border-top: 1px solid #fff; 34 | max-width: 600px; 35 | margin: 12px auto 0px auto; 36 | padding: 12px; 37 | font-size: 0px; 38 | } 39 | 40 | header nav a { 41 | margin: 6px 0px 6px 0px; 42 | font-size: 18px; 43 | font-variant: small-caps; 44 | color: white; 45 | text-decoration: none; 46 | padding: 3px 12px 3px 12px; 47 | } 48 | 49 | header nav a:hover { 50 | background-color: #64328c; 51 | } 52 | 53 | main { 54 | max-width: 800px; 55 | margin: 0px auto 0px auto; 56 | text-align: left; 57 | padding: 0px 6px 90px 6px; 58 | } 59 | 60 | footer { 61 | width: 100%; 62 | background-image: url('/images/pattern.png'); 63 | background-size: cover; 64 | background-repeat: repeat-y; 65 | color: #fff; 66 | font-size: 12px; 67 | padding: 24px 0px 24px 0px; 68 | position: absolute; 69 | bottom: 0px; 70 | } 71 | 72 | footer a { 73 | color: #fff; 74 | } 75 | 76 | h1 { 77 | color: #000; 78 | font-size: 36px; 79 | padding: 0px; 80 | margin: 48px 0px 12px 0px; 81 | font-variant: small-caps; 82 | font-weight: normal; 83 | } 84 | 85 | h2 { 86 | color: #000; 87 | font-size: 24px; 88 | padding: 0px; 89 | margin: 48px 0px 18px 0px; 90 | font-weight: normal; 91 | } 92 | 93 | p { 94 | padding: 0px; 95 | margin: 18px 0px 18px 0px; 96 | } 97 | 98 | .timeline { 99 | text-align: center; 100 | } 101 | 102 | .timeline table { 103 | text-align: left; 104 | margin: 12px auto 12px auto; 105 | border-spacing: 12px 0px; 106 | } 107 | 108 | .timeline table tr td { 109 | padding: 6px; 110 | } 111 | 112 | .timeline table tr td:nth-child(1) { 113 | border-right: 6px solid #64328c; 114 | padding-right: 36px; 115 | } 116 | 117 | .sponsors { 118 | text-align: center; 119 | } 120 | 121 | .sponsors img { 122 | display: inline; 123 | margin: 12px 24px; 124 | max-height: 100px; 125 | max-width: 210px; 126 | vertical-align: middle; 127 | } 128 | 129 | .sponsors a { 130 | text-decoration: none; 131 | } 132 | 133 | .become-a-sponsor { 134 | margin: 24px; 135 | padding: 6px; 136 | text-align: center; 137 | } 138 | 139 | .become-a-sponsor img { 140 | display: inline; 141 | height: 18px; 142 | margin: 0px 6px -2px 0px; 143 | } 144 | 145 | .become-a-sponsor a { 146 | background-image: url('/images/pattern.png'); 147 | background-size: cover; 148 | border-radius: 12px; 149 | color: #fff; 150 | font-size: 18px; 151 | font-variant: small-caps; 152 | padding: 12px 36px; 153 | text-decoration: none; 154 | } 155 | 156 | /* Anchors after headers */ 157 | a.anchor { 158 | color: #64328c; 159 | display: none; 160 | font-size: 80%; 161 | margin-left: 12px; 162 | text-decoration: none; 163 | } 164 | 165 | /* Display anchors only if we are hovering above the parent header. */ 166 | h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor { 167 | display: inline; 168 | color: #64328c; 169 | } 170 | 171 | /* Nice quotation marks indicating block quotes. */ 172 | blockquote { 173 | position: relative; 174 | margin: 0px 0px 0px 24px; 175 | } 176 | 177 | blockquote:before { 178 | content: "\201C"; 179 | font-family: Georgia, serif; 180 | position: absolute; 181 | color: #64328c; 182 | left: -64px; 183 | font-size: 128px; 184 | top: -32px; 185 | } 186 | 187 | /* Scale images down to text width. */ 188 | figure { 189 | margin: 0; 190 | text-align: center 191 | } 192 | 193 | figure img { 194 | max-width: 90%; 195 | margin: 2em auto 2em auto; 196 | } 197 | 198 | figcaption { 199 | display: none; 200 | } 201 | 202 | .notification { 203 | background: #fff4b8; 204 | padding: 12px; 205 | border-radius: 12px; 206 | } 207 | -------------------------------------------------------------------------------- /summer-of-haskell.cabal: -------------------------------------------------------------------------------- 1 | Name: summer-of-haskell 2 | Version: 0.1.0.0 3 | Synopsis: Website for the Summer of Haskell 4 | Description: Website for the Summer of Haskell. 5 | License: BSD3 6 | License-file: LICENSE 7 | Author: Jasper Van der Jeugt 8 | Maintainer: Jasper Van der Jeugt 9 | Copyright: 2016 - 2018 Haskell.Org Committee 10 | Category: Web 11 | Build-type: Simple 12 | Cabal-version: >=1.10 13 | 14 | source-repository head 15 | type: git 16 | location: https://github.com/haskell-org/summer-of-haskell.git 17 | 18 | Executable summer-of-haskell 19 | Main-is: Main.hs 20 | Ghc-options: -Wall 21 | Hs-source-dirs: src 22 | Default-language: Haskell2010 23 | 24 | Build-depends: 25 | base >= 4.8 && < 5, 26 | filepath >= 1.4 && < 1.5, 27 | hakyll >= 4.10 && < 4.17, 28 | pandoc >= 2.10 && < 3.2, 29 | pandoc-types >= 1.17 && < 1.24 30 | -------------------------------------------------------------------------------- /templates/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Summer of Haskell - $title$ 8 | 9 | 10 | 13 | 14 | 15 |
16 | 17 | Summer of Haskell 18 | 26 |
27 |
28 | $body$ 29 |
30 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /templates/news.html: -------------------------------------------------------------------------------- 1 | $for(focus)$ 2 |

$title$

3 |

4 | Posted on $date$ by $author$ (permalink) 5 |

6 | 7 | $body$ 8 | $endfor$ 9 | 10 |

Older posts

11 |
    12 | $for(all)$ 13 |
  • $date$ - $title$
  • 14 | $endfor$ 15 |
16 |

17 | An RSS feed is also 18 | available. 19 |

20 | --------------------------------------------------------------------------------