3 |
4 | $body$
5 |
--------------------------------------------------------------------------------
/stack.yaml:
--------------------------------------------------------------------------------
1 | flags: {}
2 | packages:
3 | - '.'
4 | extra-deps:
5 | - Win32-notify-0.3.0.1
6 | resolver: lts-12.13
7 |
--------------------------------------------------------------------------------
/app/images/browserstack-badge.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/beerendlauwers/HaskAnything/HEAD/app/images/browserstack-badge.png
--------------------------------------------------------------------------------
/app/vendor/lightslider/img/controls.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/beerendlauwers/HaskAnything/HEAD/app/vendor/lightslider/img/controls.png
--------------------------------------------------------------------------------
/app/templates/categories/snippet.html:
--------------------------------------------------------------------------------
1 | A snippet is a piece of (Haskell) code.
2 |
3 | Submit a new snippet
--------------------------------------------------------------------------------
/app/vendor/fontawesome/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/beerendlauwers/HaskAnything/HEAD/app/vendor/fontawesome/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/app/content/how-do-i/advanced/read-a-file-from-disk.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: read a file from disk
3 | ---
4 |
5 | The advanced way is to use pipes or conduit. Expand.
--------------------------------------------------------------------------------
/app/templates/categories/article.html:
--------------------------------------------------------------------------------
1 | An article can be a blog post, a tutorial, an opinion piece... It is essentially a piece of text with some metadata.
--------------------------------------------------------------------------------
/app/templates/tag.html:
--------------------------------------------------------------------------------
1 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/app/temptest.hs:
--------------------------------------------------------------------------------
1 |
2 | import Data.List (intersect,nub)
3 | import Data.Maybe (catMaybes)
4 |
5 |
6 | tags = [ ("tag1",["path1","path2"]), ("tag2",["path1","path3"]), ("tag3",["path3"]) ]
7 | categories = [ ("cat1",["path1"]), ("cat2",["path1","path2"]), ("cat3",["path3"]) ]
8 |
9 |
10 | matchTagsWithCategories =
11 | map f categories
12 | where
13 | f (cat,paths) = (cat, nub $ catMaybes $ concatMap (\c -> map (find c) tags ) categories)
14 |
15 |
16 | find (cat,cpaths) (tag,tpaths) =
17 | if length (intersect cpaths tpaths) > 0
18 | then Just tag
19 | else Nothing
20 |
--------------------------------------------------------------------------------
/app/content/presentation/presentation-languages-we-love.markdown:
--------------------------------------------------------------------------------
1 | ---
2 | title: Languages We Love
3 | url-video: https://www.youtube.com/watch?v=s_72snYo8z8
4 | url-slides: http://bobkonf.de/2016/slides/huard.pdf
5 | authors:
6 | - Elise Huard
7 | source: http://bobkonf.de/2016/keynote.html
8 | conference: BOB2016
9 | tags:
10 | libraries:
11 | ---
12 |
13 | Thinking back, there's a number of axes along which we can lay out languages we’ve used in the past. Let's reflect on all those dimensions - statically typed vs. dynamically typed, strongly typed vs. weakly typed, low level vs. high level, declarative vs. imperative ...
14 |
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/zh-TW.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-TW",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="請刪掉"+t+"個字元";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="請再輸入"+t+"個字元";return n},loadingMore:function(){return"載入中…"},maximumSelected:function(e){var t="你只能選擇最多"+e.maximum+"項";return t},noResults:function(){return"沒有找到相符的項目"},searching:function(){return"搜尋中…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/content/paper/paper-adventures-in-three-monads.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Adventures in Three Monads
3 | paper-url: http://web.mit.edu/~ezyang/Public/threemonads.pdf
4 | authors:
5 | - Edward Z. Yang
6 | tags:
7 | libraries:
8 | ---
9 |
10 | The standard monad libraries define a number of "bread and butter" monads, including
11 | the State, Reader, Writer, List and Maybe monads. However, they are not
12 | the only monads available to an enterprising Haskeller’s toolbox. In this text, we
13 | look at three other monads - the Logic monad, the Prompt monad, and the Failure
14 | monad - each of which tackle a common problem found in the engineering of
15 | programs.
16 |
--------------------------------------------------------------------------------
/app/content/presentation/frp-browser-programming-with-reflex.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "FRP browser programming with Reflex"
3 | url-video: "https://www.youtube.com/watch?v=dNGClNsnn24"
4 | url-slides: "https://github.com/meiersi/HaskellerZ/blob/master/meetups/20170223-Reflex_tutorial/haskellerz-reflex-tutorial-slides.pdf"
5 | authors:
6 | - Niklas Hambüchen
7 | source: https://www.youtube.com/watch?v=dNGClNsnn24
8 | tags:
9 | - GHCJS
10 | - Functional Reactive Programming (FRP)
11 | - Nix
12 | libraries:
13 | - reflex
14 | - reflex-dom
15 | ---
16 |
17 | Code is available at: https://github.com/nh2/reflex-platform/blob/haskellerz-reflex-tutorial-2017/haskellerz-reflex-tutorial.hs
18 |
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/zh-CN.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="请删除"+t+"个字符";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="请再输入至少"+t+"个字符";return n},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(e){var t="最多只能选择"+e.maximum+"个项目";return t},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/az.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/az",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return t+" simvol silin"},inputTooShort:function(e){var t=e.minimum-e.input.length;return t+" simvol daxil edin"},loadingMore:function(){return"Daha çox nəticə yüklənir…"},maximumSelected:function(e){return"Sadəcə "+e.maximum+" element seçə bilərsiniz"},noResults:function(){return"Nəticə tapılmadı"},searching:function(){return"Axtarılır…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/content/presentation/presentation--type-providers-and-error-reflection-in-idris.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Type providers and error reflection in Idris
3 | url-video: https://www.youtube.com/watch?v=dP2imvL92sY
4 | url-slides: about:blank
5 | authors:
6 | - David Christiansen
7 | source: http://www.composeconference.org/2015/speakers/
8 | conference: Compose2015
9 | tags:
10 | - Idris
11 | - Dependent Types
12 | libraries:
13 | ---
14 |
15 | David Christiansen is a contributor to Idris. He designed and implemented type providers and error reflection as well as many of the interactive features. He is currently a PhD student at the IT University of Copenhagen and an intern with Galois, Inc, in Portland, Oregon.
16 |
--------------------------------------------------------------------------------
/app/js/querystring.js:
--------------------------------------------------------------------------------
1 | function getParameterByName(name, url) {
2 | var f = function(name,url) {
3 | var values = [];
4 | if(!url){
5 | url = window.location.href;
6 | }
7 |
8 | name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
9 |
10 | var pattern = name + '=([^]+)';
11 | var o_reg = new RegExp(pattern,'ig');
12 | while(true){
13 | var matches = o_reg.exec(url);
14 | if(matches && matches[1]){
15 | values.push(decodeURIComponent(matches[1]));
16 | }
17 | else{
18 | break;
19 | }
20 | }
21 |
22 | return values;
23 | }
24 |
25 | return f(name,url).concat(f(name+"[]",url));
26 | }
27 |
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/fi.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Ole hyvä ja anna "+t+" merkkiä vähemmän"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Ole hyvä ja anna "+t+" merkkiä lisää"},loadingMore:function(){return"Ladataan lisää tuloksia…"},maximumSelected:function(e){return"Voit valita ainoastaan "+e.maximum+" kpl"},noResults:function(){return"Ei tuloksia"},searching:function(){}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/ui/elements/type-series.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Optionally, you can further differentiate between series by selecting a type here.
12 | With code support, this allows a series page to be customized on a type-by-type basis.
13 | Leave it as 'default' if you don't need this functionality.
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/ja.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ja",[],function(){return{errorLoading:function(){return"結果が読み込まれませんでした"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" 文字を削除してください";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="少なくとも "+t+" 文字を入力してください";return n},loadingMore:function(){return"読み込み中…"},maximumSelected:function(e){var t=e.maximum+" 件しか選択できません";return t},noResults:function(){return"対象が見つかりません"},searching:function(){return"検索しています…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | CNAME := haskanything.com
2 | REPO := git@github.com:beerendlauwers/HaskAnything.git
3 |
4 | EXE := /root/.local/bin/hask-anything-exe
5 |
6 | all: build
7 | @true
8 |
9 | build: ${EXE}
10 | cd app && ${EXE} build
11 |
12 | # Deploy _site to Github Pages
13 | deploy:
14 | cd app && echo ${CNAME} > _site/CNAME
15 | cd app && rm -rf _site/.git
16 | cd app/_site && touch .nojekyll
17 | cd app/_site && git init && git add .
18 | cd app/_site && git config user.email "nobody@circleci.com"
19 | cd app/_site && git config user.name CircleCI
20 | cd app/_site && git commit -m "Generated on `date`"
21 | cd app/_site && git remote add origin ${REPO}
22 | cd app/_site && git push -f origin master:gh-pages
23 |
--------------------------------------------------------------------------------
/app/content/presentation/presentation-chaos-engineering-at-jet.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Chaos Engineering at Jet
3 | url-video: https://www.youtube.com/watch?v=Q1tgb3m0Fy4
4 | url-slides: https://qconlondon.com/london-2016/system/files/presentation-slides/chaos_engineering_at_jet.com_-_qcon.pdf
5 | authors:
6 | - Rachel Reese
7 | source: http://www.composeconference.org/2016/speakers/
8 | conference: Compose2016
9 | tags:
10 | libraries:
11 | ---
12 |
13 | Some of the biggest growing pains we’ve experienced with our microservice architecture at Jet is in preparing for system outages. I’ll discuss our chaos testing methods and the F# code we’re using in depth, as well as lay out a path to implementation that everyone can use.
14 |
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/hu.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Túl hosszú. "+t+" karakterrel több, mint kellene."},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Túl rövid. Még "+t+" karakter hiányzik."},loadingMore:function(){return"Töltés…"},maximumSelected:function(e){return"Csak "+e.maximum+" elemet lehet kiválasztani."},noResults:function(){return"Nincs találat."},searching:function(){return"Keresés…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/tr.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/tr",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" karakter daha girmelisiniz";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="En az "+t+" karakter daha girmelisiniz";return n},loadingMore:function(){return"Daha fazla…"},maximumSelected:function(e){var t="Sadece "+e.maximum+" seçim yapabilirsiniz";return t},noResults:function(){return"Sonuç bulunamadı"},searching:function(){return"Aranıyor…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/ko.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="너무 깁니다. "+t+" 글자 지워주세요.";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="너무 짧습니다. "+t+" 글자 더 입력해주세요.";return n},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(e){var t="최대 "+e.maximum+"개까지만 선택 가능합니다.";return t},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/th.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/th",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="โปรดลบออก "+t+" ตัวอักษร";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="โปรดพิมพ์เพิ่มอีก "+t+" ตัวอักษร";return n},loadingMore:function(){return"กำลังค้นข้อมูลเพิ่ม…"},maximumSelected:function(e){var t="คุณสามารถเลือกได้ไม่เกิน "+e.maximum+" รายการ";return t},noResults:function(){return"ไม่พบข้อมูล"},searching:function(){return"กำลังค้นข้อมูล…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/strip-yaml-header/strip-yaml-header.js:
--------------------------------------------------------------------------------
1 | // LICENSE : MIT
2 | "use strict";
3 | function normalize(markdown) {
4 | var pattern = pattern = '^(' +
5 | '((= yaml =)|(---))' +
6 | '$([\\s\\S]*?)' +
7 | '\\2' +
8 | '$' +
9 | '(?:\\n)?)';
10 |
11 | var yamlRegexp = new RegExp(pattern, 'm');
12 |
13 | function replaceByBr(text) {
14 | return text.replace(yamlRegexp, function (all) {
15 | var lines = all.split("\n");
16 | return (new Array(lines.length)).join("\n");
17 | });
18 |
19 | }
20 |
21 | if (yamlRegexp.test(markdown)) {
22 | return replaceByBr(markdown);
23 | }
24 | return markdown;
25 | }
26 | //module.exports = normalize;
27 |
--------------------------------------------------------------------------------
/app/content/reddit-post/reddit-post-t1_d2hru95.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: reddit-post-t1_d2hru95.md
3 | author: torstengrust
4 | unique_id: t1_d2hru95
5 | subreddit: haskell
6 | reddit-url: https://www.reddit.com/r/haskell/comments/4ght6b/%CE%BB_bubble_popa_simple_game_that_illustrates/d2hru95
7 | tags: game
8 | libraries:
9 | ---
10 |
11 | Looks (and sounds!) great.
12 |
13 | There's a caveat related to pattern matching, though. If you try to pop/reduce
14 |
15 | take 3 [1,2,3,4,5]
16 |
17 | and repeatedly pop the `take` bubble, the reduction goes astray. You need to make sure to pop the `n - 1` bubble — for the then current value of `n` — at the right times to simulate the evaluation of pattern-matched arguments.
18 |
19 | Still fun. \*pop\*
20 |
--------------------------------------------------------------------------------
/app/content/article/beginners-guide-to-megaparsec.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Beginner's guide to Megaparsec"
3 | date: 2017-01-19
4 | permission-file:
5 | url: "http://akashagrawal.me/beginners-guide-to-megaparsec/"
6 | authors:
7 | - Akash Agrawal
8 | type: "tutorial"
9 | tags:
10 | - "Parsing"
11 | libraries:
12 | - "megaparsec"
13 | ---
14 |
15 | The introduction from the article:
16 |
17 | > Megaparsec is a parsing library written in Haskell. It's a fork of the popular Parsec and is more up to date.
18 | >
19 | > This post came into being because while there are tutorials for Parsec, there aren't many for Megaparsec. As a Haskell noob, I found myself discouraged to depend on Parsec tutorials too much, given that Megaparsec may have diverged over time.
20 |
--------------------------------------------------------------------------------
/app/content/presentation/presentation--fundamentals-of-dependent-type-theory.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Fundamentals of dependent type theory
3 | url-video: https://www.youtube.com/watch?v=6klfKLBnz9k
4 | url-slides: https://github.com/sweirich/pi-forall/blob/2014/compose15.pdf
5 | authors:
6 | - Stephanie Weirich
7 | source: http://www.composeconference.org/2015/speakers/
8 | conference: Compose2015
9 | tags:
10 | - Dependent Types
11 | libraries:
12 | ---
13 |
14 | Stephanie Weirich is an professor at University of Pennsylvania whose research focuses on dependently typed functional programming. Her work includes extensive contributions to the Glasgow Haskell Compiler's type system and a plethora of research papers advancing the state of the art in type theory.
15 |
--------------------------------------------------------------------------------
/app/templates/content/reddit-post.html:
--------------------------------------------------------------------------------
1 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/app/content/series/conference-compose-2015.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Compose Conference 2015
3 | dates:
4 | - 30-01-2015
5 | - 01-02-2015
6 | list:
7 | - presentation/presentation--fundamentals-of-dependent-type-theory.md
8 | - presentation/presentation--robots-on-haskell.md
9 | - presentation/presentation--type-providers-and-error-reflection-in-idris.md
10 | - presentation/presentation--lvars-lattice-based-data-structures-for-deterministic-parallel-and-distributed-programming.md
11 | type: conference
12 | tags:
13 | libraries:
14 | ---
15 |
16 | C◦mp◦se is a conference for functional programmers, focused on technologies such as Haskell, Scala, Clojure, OCaml, F#, SML and others.
17 |
18 | This series contains the presentations of 2015, focused on Haskell.
19 |
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/id.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/id",[],function(){return{errorLoading:function(){return"Data tidak boleh diambil."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Hapuskan "+t+" huruf"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Masukkan "+t+" huruf lagi"},loadingMore:function(){return"Mengambil data…"},maximumSelected:function(e){return"Anda hanya dapat memilih "+e.maximum+" pilihan"},noResults:function(){return"Tidak ada data yang sesuai"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/vi.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/vi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vui lòng nhập ít hơn "+t+" ký tự";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vui lòng nhập nhiều hơn "+t+' ký tự"';return n},loadingMore:function(){return"Đang lấy thêm kết quả…"},maximumSelected:function(e){var t="Chỉ có thể chọn được "+e.maximum+" lựa chọn";return t},noResults:function(){return"Không tìm thấy kết quả"},searching:function(){return"Đang tìm…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/is.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/is",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vinsamlegast styttið texta um "+t+" staf";return t<=1?n:n+"i"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vinsamlegast skrifið "+t+" staf";return t>1&&(n+="i"),n+=" í viðbót",n},loadingMore:function(){return"Sæki fleiri niðurstöður…"},maximumSelected:function(e){return"Þú getur aðeins valið "+e.maximum+" atriði"},noResults:function(){return"Ekkert fannst"},searching:function(){return"Leita…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/content/article/monads-made-difficult.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Monads Made Difficult"
3 | date: 2013-06-07
4 | permission-file:
5 | url: "http://www.stephendiehl.com/posts/monads.html"
6 | authors:
7 | - Stephen Diehl
8 | type: "article"
9 | tags:
10 | - "Category Theory"
11 | - "Monads"
12 | libraries:
13 | ---
14 |
15 | From the article:
16 |
17 | > *Caveat: This is not a monad tutorial, you should not read this to understand monads initially. If you aren’t already comfortable with monads and have used them in production code, please don’t read this. It will not impart any intution.*
18 |
19 | > This is a short, fast and analogy-free introduction to Haskell monads derived from a categorical perspective. This assumes you are familiar with Haskell and basic category theory.
20 |
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/ar.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ar",[],function(){return{errorLoading:function(){return"لا يمكن تحميل النتائج"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="الرجاء حذف "+t+" عناصر";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="الرجاء إضافة "+t+" عناصر";return n},loadingMore:function(){return"جاري تحميل نتائج إضافية..."},maximumSelected:function(e){var t="تستطيع إختيار "+e.maximum+" بنود فقط";return t},noResults:function(){return"لم يتم العثور على أي نتائج"},searching:function(){return"جاري البحث…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/de.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/de",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Bitte "+t+" Zeichen weniger eingeben"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Bitte "+t+" Zeichen mehr eingeben"},loadingMore:function(){return"Lade mehr Ergebnisse…"},maximumSelected:function(e){var t="Sie können nur "+e.maximum+" Eintr";return e.maximum===1?t+="ag":t+="äge",t+=" auswählen",t},noResults:function(){return"Keine Übereinstimmungen gefunden"},searching:function(){return"Suche…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/et.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/et",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" vähem",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" rohkem",n},loadingMore:function(){return"Laen tulemusi…"},maximumSelected:function(e){var t="Saad vaid "+e.maximum+" tulemus";return e.maximum==1?t+="e":t+="t",t+=" valida",t},noResults:function(){return"Tulemused puuduvad"},searching:function(){return"Otsin…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/content/article/nginx-haskell-module-labeled-media-routing-example.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "nginx-haskell-module: labeled media routing example"
3 | date: 2017-01-04
4 | permission-file:
5 | url: "http://lin-techdet.blogspot.be/2017/01/nginx-haskell-module-labeled-media.html"
6 | authors:
7 | - garuda
8 | type: "article"
9 | tags:
10 | - "routing"
11 | - "nginx"
12 | - "round-robin"
13 | libraries:
14 | - "aeson"
15 | - "async"
16 | - "nginx-haskell-module"
17 | ---
18 |
19 | A description by [/u/sheshanaag](https://www.reddit.com/user/sheshanaag) on Reddit:
20 |
21 | > This example shows in principle how environments with dynamic backends can be managed without restarting nginx and (more importantly) how nginx instances can be made active clients (in this case of each other).
22 |
--------------------------------------------------------------------------------
/app/content/article/safe-prelude-a-thought-experiment.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "safe-prelude: a thought experiment"
3 | date: 2017-01-16
4 | permission-file:
5 | url: "http://www.snoyman.com/blog/2017/01/safe-prelude-a-thought-experiment"
6 | authors:
7 | - Michael Snoyman
8 | type: "blog"
9 | tags:
10 | - "Alternative Prelude"
11 | libraries:
12 | - "safe-prelude"
13 | ---
14 |
15 | From the blog post:
16 |
17 | > This is a thought experiment in a different point in the alternative prelude design space. After my blog post on readFile, I realized I was unhappy with the polymorphic nature of readFile in classy-prelude. Adding that with Haskell Pitfalls I've been itching to try something else. I have a lot of hope for the foundation project, but wanted to play with this in the short term.
18 |
--------------------------------------------------------------------------------
/app/content/presentation/presentation--robots-on-haskell.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Fundamentals of dependent type theory
3 | url-video: https://www.youtube.com/watch?v=2-JFkv9-JOQ
4 | url-slides: about:blank
5 | authors:
6 | - Anthony Cowley
7 | source: http://www.composeconference.org/2015/speakers/
8 | conference: Compose2015
9 | tags:
10 | - Robotics
11 | libraries:
12 | ---
13 |
14 | Anthony Cowley is a robotics researcher and PhD candidate at the GRASP Lab at the University of Pennsylvania. He has worked on video games for music education and entertainment and was a research associate at GRASP before returning to student life in 2010. His interests include real-time computer vision, embedded systems, multi-agent coordination, and programming language driven verification of robotic systems.
15 |
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/sv.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sv",[],function(){return{errorLoading:function(){return"Resultat kunde inte laddas."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vänligen sudda ut "+t+" tecken";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vänligen skriv in "+t+" eller fler tecken";return n},loadingMore:function(){return"Laddar fler resultat…"},maximumSelected:function(e){var t="Du kan max välja "+e.maximum+" element";return t},noResults:function(){return"Inga träffar"},searching:function(){return"Söker…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/content/paper/paper-gadts-meet-their-match.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: GADTs Meet Their Match
3 | paper-url: http://research.microsoft.com/en-us/um/people/simonpj/papers/pattern-matching/gadtpm.pdf
4 | authors:
5 | - Georgios Karachalias
6 | - Tom Schrijvers
7 | - Dimitrios Vytiniotis
8 | - Simon Peyton Jones
9 | tags: gadts
10 | ---
11 |
12 | For ML and Haskell, accurate warnings when a function definition
13 | has redundant or missing patterns are mission critical. But today's
14 | compilers generate bogus warnings when the programmer
15 | uses guards (even simple ones), GADTs, pattern guards, or view
16 | patterns. We give the first algorithm that handles all these cases in
17 | a single, uniform framework, together with an implementation in
18 | GHC, and evidence of its utility in practice.
19 |
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/bg.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/bg",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Моля въведете с "+t+" по-малко символ";return t>1&&(n+="a"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Моля въведете още "+t+" символ";return t>1&&(n+="a"),n},loadingMore:function(){return"Зареждат се още…"},maximumSelected:function(e){var t="Можете да направите до "+e.maximum+" ";return e.maximum>1?t+="избора":t+="избор",t},noResults:function(){return"Няма намерени съвпадения"},searching:function(){return"Търсене…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/km.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/km",[],function(){return{errorLoading:function(){return"មិនអាចទាញយកទិន្នន័យ"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="សូមលុបចេញ "+t+" អក្សរ";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="សូមបញ្ចូល"+t+" អក្សរ រឺ ច្រើនជាងនេះ";return n},loadingMore:function(){return"កំពុងទាញយកទិន្នន័យបន្ថែម..."},maximumSelected:function(e){var t="អ្នកអាចជ្រើសរើសបានតែ "+e.maximum+" ជម្រើសប៉ុណ្ណោះ";return t},noResults:function(){return"មិនមានលទ្ធផល"},searching:function(){return"កំពុងស្វែងរក..."}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/nb.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nb",[],function(){return{errorLoading:function(){return"Kunne ikke hente resultater."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Vennligst fjern "+t+" tegn"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vennligst skriv inn ";return t>1?n+=" flere tegn":n+=" tegn til",n},loadingMore:function(){return"Laster flere resultater…"},maximumSelected:function(e){return"Du kan velge maks "+e.maximum+" elementer"},noResults:function(){return"Ingen treff"},searching:function(){return"Søker…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/ms.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ms",[],function(){return{errorLoading:function(){return"Keputusan tidak berjaya dimuatkan."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Sila hapuskan "+t+" aksara"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Sila masukkan "+t+" atau lebih aksara"},loadingMore:function(){return"Sedang memuatkan keputusan…"},maximumSelected:function(e){return"Anda hanya boleh memilih "+e.maximum+" pilihan"},noResults:function(){return"Tiada padanan yang ditemui"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/templates/content/article.html:
--------------------------------------------------------------------------------
1 |
25 |
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/gl.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/gl",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Elimine ";return t===1?n+="un carácter":n+=t+" caracteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Engada ";return t===1?n+="un carácter":n+=t+" caracteres",n},loadingMore:function(){return"Cargando máis resultados…"},maximumSelected:function(e){var t="Só pode ";return e.maximum===1?t+="un elemento":t+=e.maximum+" elementos",t},noResults:function(){return"Non se atoparon resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/content/presentation/presentation--fun-with-GHCJSi.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Fun with GHCJSi
3 | url-video: https://www.youtube.com/watch?v=x7dQVZiWjvA
4 | url-slides: about:blank
5 | authors:
6 | - Luite Stegeman
7 | source: http://www.composeconference.org/2016/speakers/
8 | conference: Compose2016
9 | tags:
10 | - GHCJS
11 | libraries:
12 | ---
13 |
14 | A recent new GHCJS feature is a REPL, GHCJSi. On the surface, GHCJSi looks exactly like GHCi.
15 | However, when a browser connects to the REPL session, all code is run inside the browser, giving the user full control over the browser’s HTML document and JavaScript environment.
16 |
17 | I will briefly discuss the design and implementation of GHCJSi and demonstrate how to use the REPL for browser-based Haskell development, making use of various GHCJS libraries.
18 |
--------------------------------------------------------------------------------
/app/ui/elements/metadata.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | You can add new tags by typing them and pressing Enter.
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/da.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/da",[],function(){return{errorLoading:function(){return"Resultaterne kunne ikke indlæses."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Angiv venligst "+t+" tegn mindre";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Angiv venligst "+t+" tegn mere";return n},loadingMore:function(){return"Indlæser flere resultater…"},maximumSelected:function(e){var t="Du kan kun vælge "+e.maximum+" emne";return e.maximum!=1&&(t+="r"),t},noResults:function(){return"Ingen resultater fundet"},searching:function(){return"Søger…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/content/presentation/presentation--keeping-front-end-development-simple-with-react.markdown:
--------------------------------------------------------------------------------
1 | ---
2 | title: Keeping Front-end Development Simple with React
3 | url-video: https://www.youtube.com/watch?v=1275641lpkI
4 | url-slides: http://bobkonf.de/2016/slides/tsui.pdf
5 | authors:
6 | - Tony Tsui
7 | source: http://bobkonf.de/2016/tsui.html
8 | conference: BOB2016
9 | tags:
10 | - React
11 | - Redux
12 | libraries:
13 | ---
14 |
15 | Over the last year Facebook’s React JavaScript library has had a meteoric rise in popularity. The virtual DOM, Flux, unidirectional data flow and JSX all sounds cool. But does it actually make front-end development simpler or is it just the latest front-end fad? Find out how React + Redux enabled my team to write simple, but not simplistic, code. Perhaps our journey will inspire you to begin yours.
16 |
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/en.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Please delete "+t+" character";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Please enter "+t+" or more characters";return n},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var t="You can only select "+e.maximum+" item";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/jquery-sortable/css/jquery-sortable.css.sass:
--------------------------------------------------------------------------------
1 | body.dragging, body.dragging *
2 | cursor: move !important
3 |
4 | .dragged
5 | position: absolute
6 | top: 0
7 | opacity: .5
8 | z-index: 2000
9 |
10 | ol.vertical
11 | margin: 0 0 9px 0
12 | min-height: 10px
13 | li
14 | display: block
15 | margin: 5px
16 | padding: 5px
17 | border: 1px solid #CCC
18 | color: $linkColor
19 | background: $grayLighter
20 | li.placeholder
21 | position: relative
22 | margin: 0
23 | padding: 0
24 | border: none
25 | &:before
26 | position: absolute
27 | content: ""
28 | width: 0
29 | height: 0
30 | margin-top: -5px
31 | left: -5px
32 | top: -4px
33 | border: 5px solid transparent
34 | border-left-color: $error
35 | border-right: none
36 |
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/he.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/he",[],function(){return{errorLoading:function(){return"שגיאה בטעינת התוצאות"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="נא למחוק ";return t===1?n+="תו אחד":n+=t+" תווים",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="נא להכניס ";return t===1?n+="תו אחד":n+=t+" תווים",n+=" או יותר",n},loadingMore:function(){return"טוען תוצאות נוספות…"},maximumSelected:function(e){var t="באפשרותך לבחור עד ";return e.maximum===1?t+="פריט אחד":t+=e.maximum+" פריטים",t},noResults:function(){return"לא נמצאו תוצאות"},searching:function(){return"מחפש…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/templates/content/presentation.html:
--------------------------------------------------------------------------------
1 |
28 |
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/fa.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fa",[],function(){return{errorLoading:function(){return"امکان بارگذاری نتایج وجود ندارد."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="لطفاً "+t+" کاراکتر را حذف نمایید";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="لطفاً تعداد "+t+" کاراکتر یا بیشتر وارد نمایید";return n},loadingMore:function(){return"در حال بارگذاری نتایج بیشتر..."},maximumSelected:function(e){var t="شما تنها میتوانید "+e.maximum+" آیتم را انتخاب نمایید";return t},noResults:function(){return"هیچ نتیجهای یافت نشد"},searching:function(){return"در حال جستجو..."}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/hi.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hi",[],function(){return{errorLoading:function(){return"परिणामों को लोड नहीं किया जा सका।"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" अक्षर को हटा दें";return t>1&&(n=t+" अक्षरों को हटा दें "),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="कृपया "+t+" या अधिक अक्षर दर्ज करें";return n},loadingMore:function(){return"अधिक परिणाम लोड हो रहे है..."},maximumSelected:function(e){var t="आप केवल "+e.maximum+" आइटम का चयन कर सकते हैं";return t},noResults:function(){return"कोई परिणाम नहीं मिला"},searching:function(){return"खोज रहा है..."}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/hr.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hr",[],function(){function e(e){var t=" "+e+" znak";return e%10<5&&e%10>0&&(e%100<5||e%100>19)?e%10>1&&(t+="a"):t+="ova",t}return{errorLoading:function(){return"Preuzimanje nije uspjelo."},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Unesite "+e(n)},inputTooShort:function(t){var n=t.minimum-t.input.length;return"Unesite još "+e(n)},loadingMore:function(){return"Učitavanje rezultata…"},maximumSelected:function(e){return"Maksimalan broj odabranih stavki je "+e.maximum},noResults:function(){return"Nema rezultata"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/mk.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/mk",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Ве молиме внесете "+e.maximum+" помалку карактер";return e.maximum!==1&&(n+="и"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Ве молиме внесете уште "+e.maximum+" карактер";return e.maximum!==1&&(n+="и"),n},loadingMore:function(){return"Вчитување резултати…"},maximumSelected:function(e){var t="Можете да изберете само "+e.maximum+" ставк";return e.maximum===1?t+="а":t+="и",t},noResults:function(){return"Нема пронајдено совпаѓања"},searching:function(){return"Пребарување…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/eu.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/eu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gutxiago",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gehiago",n},loadingMore:function(){return"Emaitza gehiago kargatzen…"},maximumSelected:function(e){return e.maximum===1?"Elementu bakarra hauta dezakezu":e.maximum+" elementu hauta ditzakezu soilik"},noResults:function(){return"Ez da bat datorrenik aurkitu"},searching:function(){return"Bilatzen…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/src/HaskAnything/Internal/Extra.hs:
--------------------------------------------------------------------------------
1 | {-# LANGUAGE OverloadedStrings #-}
2 |
3 | module HaskAnything.Internal.Extra where
4 |
5 | import Hakyll
6 |
7 | import Data.Char (chr)
8 | import Data.ByteString.Lazy (unpack,ByteString)
9 | import System.FilePath (takeBaseName, takeDirectory)
10 |
11 | -- Lazy bytestring stuff
12 | loadBodyLBS :: Identifier -> Compiler ByteString
13 | loadBodyLBS = loadBody
14 |
15 | -- |Convert a lazy ByteString to a string without double quotes screwing things up. ASCII only.
16 | toString :: ByteString -> String
17 | toString = map (chr . fromEnum) . unpack
18 |
19 | -- Copied over from Hakyll.Web.Tags
20 | getCategory :: MonadMetadata m => Identifier -> m [String]
21 | getCategory = return . return . takeBaseName . takeDirectory . toFilePath
22 |
--------------------------------------------------------------------------------
/app/content/presentation/writing-production-quality-code.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Writing Production Quality Code"
3 | url-video: "https://www.youtube.com/watch?v=_pDUq0nNjhI"
4 | url-slides: "https://github.com/meiersi/HaskellerZ/blob/master/meetups/20150531-ZuriHac2015_Johan_Tibell-Performance/slides.md"
5 | authors:
6 | - Johan Tibell
7 | source: https://www.youtube.com/watch?v=_pDUq0nNjhI
8 | tags:
9 | - Performance
10 | - GHC
11 | - Core
12 | - Best Practices
13 | libraries:
14 | ---
15 |
16 | Production quality code not only needs to compute the correct result, but needs to do so within some given resource constraints (i.e. time and memory).
17 | We'll look at the most common optimizations you can use to make your Haskell code perform better and some rules of thumb you can use in your daily Haskell programming to avoid some performance problems "by design".
18 |
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/pt-BR.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt-BR",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Apague "+t+" caracter";return t!=1&&(n+="es"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Digite "+t+" ou mais caracteres";return n},loadingMore:function(){return"Carregando mais resultados…"},maximumSelected:function(e){var t="Você só pode selecionar "+e.maximum+" ite";return e.maximum==1?t+="m":t+="ns",t},noResults:function(){return"Nenhum resultado encontrado"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/pt.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor apague "+t+" ";return n+=t!=1?"caracteres":"carácter",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Introduza "+t+" ou mais caracteres";return n},loadingMore:function(){return"A carregar mais resultados…"},maximumSelected:function(e){var t="Apenas pode seleccionar "+e.maximum+" ";return t+=e.maximum!=1?"itens":"item",t},noResults:function(){return"Sem resultados"},searching:function(){return"A procurar…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/lv.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lv",[],function(){function e(e,t,n,r){return e===11?t:e%10===1?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Lūdzu ievadiet par "+n;return r+=" simbol"+e(n,"iem","u","iem"),r+" mazāk"},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Lūdzu ievadiet vēl "+n;return r+=" simbol"+e(n,"us","u","us"),r},loadingMore:function(){return"Datu ielāde…"},maximumSelected:function(t){var n="Jūs varat izvēlēties ne vairāk kā "+t.maximum;return n+=" element"+e(t.maximum,"us","u","us"),n},noResults:function(){return"Sakritību nav"},searching:function(){return"Meklēšana…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/es.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/es",[],function(){return{errorLoading:function(){return"La carga falló"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor, elimine "+t+" car";return t==1?n+="ácter":n+="acteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Por favor, introduzca "+t+" car";return t==1?n+="ácter":n+="acteres",n},loadingMore:function(){return"Cargando más resultados…"},maximumSelected:function(e){var t="Sólo puede seleccionar "+e.maximum+" elemento";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No se encontraron resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/ca.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ca",[],function(){return{errorLoading:function(){return"La càrrega ha fallat"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Si us plau, elimina "+t+" car";return t==1?n+="àcter":n+="àcters",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Si us plau, introdueix "+t+" car";return t==1?n+="àcter":n+="àcters",n},loadingMore:function(){return"Carregant més resultats…"},maximumSelected:function(e){var t="Només es pot seleccionar "+e.maximum+" element";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No s'han trobat resultats"},searching:function(){return"Cercant…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/it.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/it",[],function(){return{errorLoading:function(){return"I risultati non possono essere caricati."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Per favore cancella "+t+" caratter";return t!==1?n+="i":n+="e",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Per favore inserisci "+t+" o più caratteri";return n},loadingMore:function(){return"Caricando più risultati…"},maximumSelected:function(e){var t="Puoi selezionare solo "+e.maximum+" element";return e.maximum!==1?t+="i":t+="o",t},noResults:function(){return"Nessun risultato trovato"},searching:function(){return"Sto cercando…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/fr.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fr",[],function(){return{errorLoading:function(){return"Les résultats ne peuvent pas être chargés."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Supprimez "+t+" caractère";return t!==1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Saisissez "+t+" caractère";return t!==1&&(n+="s"),n},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){var t="Vous pouvez seulement sélectionner "+e.maximum+" élément";return e.maximum!==1&&(t+="s"),t},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/ro.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ro",[],function(){return{errorLoading:function(){return"Rezultatele nu au putut fi incărcate."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vă rugăm să ștergeți"+t+" caracter";return t!==1&&(n+="e"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vă rugăm să introduceți "+t+"sau mai multe caractere";return n},loadingMore:function(){return"Se încarcă mai multe rezultate…"},maximumSelected:function(e){var t="Aveți voie să selectați cel mult "+e.maximum;return t+=" element",e.maximum!==1&&(t+="e"),t},noResults:function(){return"Nu au fost găsite rezultate"},searching:function(){return"Căutare…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/nl.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nl",[],function(){return{errorLoading:function(){return"De resultaten konden niet worden geladen."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Gelieve "+t+" karakters te verwijderen";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Gelieve "+t+" of meer karakters in te voeren";return n},loadingMore:function(){return"Meer resultaten laden…"},maximumSelected:function(e){var t=e.maximum==1?"kan":"kunnen",n="Er "+t+" maar "+e.maximum+" item";return e.maximum!=1&&(n+="s"),n+=" worden geselecteerd",n},noResults:function(){return"Geen resultaten gevonden…"},searching:function(){return"Zoeken…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/lt.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lt",[],function(){function e(e,t,n,r){return e%10===1&&(e%100<11||e%100>19)?t:e%10>=2&&e%10<=9&&(e%100<11||e%100>19)?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Pašalinkite "+n+" simbol";return r+=e(n,"į","ius","ių"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Įrašykite dar "+n+" simbol";return r+=e(n,"į","ius","ių"),r},loadingMore:function(){return"Kraunama daugiau rezultatų…"},maximumSelected:function(t){var n="Jūs galite pasirinkti tik "+t.maximum+" element";return n+=e(t.maximum,"ą","us","ų"),n},noResults:function(){return"Atitikmenų nerasta"},searching:function(){return"Ieškoma…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/js/series-item-picker.js:
--------------------------------------------------------------------------------
1 | function populateCategoryPicker() {
2 | var dropdowns = [
3 | ["../../json/categories.json",'#category-series'],
4 | ];
5 |
6 | R.map ( R.apply(loadSingleDropdown), dropdowns );
7 | }
8 |
9 | function loadSingleDropdown( url, id ) {
10 | jQuery.ajax( url )
11 | .done( function(data) {
12 | var options = R.map( function(item) { return ''; } )( data );
13 | jQuery(id).append(options);
14 |
15 | // Initialize select2 plugin.
16 | jQuery(id).select2({
17 | });
18 |
19 | }).fail(function(xhr, ajaxOptions, thrownError) {
20 | console.log("failure");
21 | console.log(xhr);
22 | console.log(ajaxOptions);
23 | console.log(thrownError);
24 | });
25 | }
26 |
27 | populateCategoryPicker();
28 |
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/pl.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pl",[],function(){var e=["znak","znaki","znaków"],t=["element","elementy","elementów"],n=function(t,n){if(t===1)return n[0];if(t>1&&t<=4)return n[1];if(t>=5)return n[2]};return{errorLoading:function(){return"Nie można załadować wyników."},inputTooLong:function(t){var r=t.input.length-t.maximum;return"Usuń "+r+" "+n(r,e)},inputTooShort:function(t){var r=t.minimum-t.input.length;return"Podaj przynajmniej "+r+" "+n(r,e)},loadingMore:function(){return"Trwa ładowanie…"},maximumSelected:function(e){return"Możesz zaznaczyć tylko "+e.maximum+" "+n(e.maximum,t)},noResults:function(){return"Brak wyników"},searching:function(){return"Trwa wyszukiwanie…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/el.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/el",[],function(){return{errorLoading:function(){return"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Παρακαλώ διαγράψτε "+t+" χαρακτήρ";return t==1&&(n+="α"),t!=1&&(n+="ες"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Παρακαλώ συμπληρώστε "+t+" ή περισσότερους χαρακτήρες";return n},loadingMore:function(){return"Φόρτωση περισσότερων αποτελεσμάτων…"},maximumSelected:function(e){var t="Μπορείτε να επιλέξετε μόνο "+e.maximum+" επιλογ";return e.maximum==1&&(t+="ή"),e.maximum!=1&&(t+="ές"),t},noResults:function(){return"Δεν βρέθηκαν αποτελέσματα"},searching:function(){return"Αναζήτηση…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/sr.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sr",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Preuzimanje nije uspelo."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Obrišite "+n+" simbol";return r+=e(n,"","a","a"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Ukucajte bar još "+n+" simbol";return r+=e(n,"","a","a"),r},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(t){var n="Možete izabrati samo "+t.maximum+" stavk";return n+=e(t.maximum,"u","e","i"),n},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/uk.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/uk",[],function(){function e(e,t,n,r){return e%100>10&&e%100<15?r:e%10===1?t:e%10>1&&e%10<5?n:r}return{errorLoading:function(){return"Неможливо завантажити результати"},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Будь ласка, видаліть "+n+" "+e(t.maximum,"літеру","літери","літер")},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Будь ласка, введіть "+t+" або більше літер"},loadingMore:function(){return"Завантаження інших результатів…"},maximumSelected:function(t){return"Ви можете вибрати лише "+t.maximum+" "+e(t.maximum,"пункт","пункти","пунктів")},noResults:function(){return"Нічого не знайдено"},searching:function(){return"Пошук…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/sr-Cyrl.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sr-Cyrl",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Преузимање није успело."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Обришите "+n+" симбол";return r+=e(n,"","а","а"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Укуцајте бар још "+n+" симбол";return r+=e(n,"","а","а"),r},loadingMore:function(){return"Преузимање још резултата…"},maximumSelected:function(t){var n="Можете изабрати само "+t.maximum+" ставк";return n+=e(t.maximum,"у","е","и"),n},noResults:function(){return"Ништа није пронађено"},searching:function(){return"Претрага…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/content/presentation/presentation--verdict-reified-refinement.markdown:
--------------------------------------------------------------------------------
1 | ---
2 | title: Verdict - Reified refinement
3 | url-video: https://www.youtube.com/watch?v=w9X1I1ySCCM
4 | url-slides: https://raw.githubusercontent.com/jkarni/bobkonf/master/presentation.md
5 | authors:
6 | - Julian Arni
7 | source: http://bobkonf.de/2016/arni.html
8 | conference: BOB2016
9 | tags:
10 | - DSL
11 | libraries:
12 | - verdict
13 | ---
14 |
15 | [Verdict](https://hackage.haskell.org/package/verdict) is a Haskell library that provides a way of reifying constraints on a type. It exposes a type-level DSL for constraints, and provides functions to verify that those constraints hold of a value, to represent those constraints as JSON schema, to deserialize values with validation, to deal with implications between constraints, and others. We will see how this provides us with a lightweight and practical (at the cost of some safety and runtime checks) contract system.
16 |
--------------------------------------------------------------------------------
/app/content/presentation/presentation-reflex-practical-functional-reactive-programming-frp-in-haskell.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Reflex: Practical Functional Reactive Programming (FRP) in Haskell"
3 | url-video: https://www.youtube.com/watch?v=mYvkcskJbc4
4 | url-slides: https://obsidian.systems/reflex-nyhug/
5 | authors:
6 | - Ryan Trinkle
7 | source: https://www.youtube.com/watch?v=mYvkcskJbc4
8 | conference: New York Haskell Meetup
9 | tags: Functional Reactive Programming (FRP)
10 | libraries: reflex,reflex-dom
11 | ---
12 |
13 | Ryan Trinkle gives an introduction to his `reflex` library. The talk begins by introducing the interpretation of FRP realized in `reflex`, then `reflex-dom` is used to demonstrate how `reflex` can be used to create a website interacting with the Twitter API, and finally design decisions and primitives of the library are discussed.
14 |
15 | Part 2 of the video can be found [here](https://www.youtube.com/watch?v=3qfc9XFVo2c).
16 |
--------------------------------------------------------------------------------
/app/content/presentation/free-delivery.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Free Delivery"
3 | url-video: "https://www.youtube.com/watch?v=Z8HfOuFqhU4"
4 | url-slides: "about:blank"
5 | authors:
6 | - Jeremy Gibbons
7 | source: http://icfp16.sigplan.org/event/haskellsymp-2016-papers-free-delivery-functional-pearl-
8 | tags:
9 | - Distributed Computing
10 | - Applicative Functors
11 | libraries:
12 | ---
13 |
14 | Remote procedure calls are computationally expensive, because network round-trips take several orders of magnitude longer than local interactions. One common technique for amortizing this cost is to batch together multiple independent requests into one compound request. Batching requests amounts to serializing the abstract syntax tree of a small program, in order to transmit it and run it remotely. The standard representation for abstract syntax is to use free monads; we show that free applicative functors are actually a better choice of representation for this scenario.
15 |
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/ru.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ru",[],function(){function e(e,t,n,r){return e%10<5&&e%10>0&&e%100<5||e%100>20?e%10>1?n:t:r}return{errorLoading:function(){return"Невозможно загрузить результаты"},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Пожалуйста, введите на "+n+" символ";return r+=e(n,"","a","ов"),r+=" меньше",r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Пожалуйста, введите еще хотя бы "+n+" символ";return r+=e(n,"","a","ов"),r},loadingMore:function(){return"Загрузка данных…"},maximumSelected:function(t){var n="Вы можете выбрать не более "+t.maximum+" элемент";return n+=e(t.maximum,"","a","ов"),n},noResults:function(){return"Совпадений не найдено"},searching:function(){return"Поиск…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/content/presentation/presentation-add-a-type-parameter-one-simple-design-change-a-panoply-of-outcomes.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Add a type parameter! One 'simple' design change, a panoply of outcomes"
3 | url-video: https://www.youtube.com/watch?v=BHjIl81HgfE
4 | url-slides: http://nocandysw.com/add-a-type-parameter.pdf
5 | authors:
6 | - Stephen Compall
7 | source: http://www.composeconference.org/2016/speakers/
8 | conference: Compose2016
9 | tags:
10 | libraries:
11 | ---
12 |
13 | When designing datatypes, adding a type parameter is a simple expedient with a surprising variety of applications. This talk is a survey of datatype examples with functions operating on them in Haskell, to which we add a type parameter, stir, and observe the effects.
14 |
15 | Attendees who prefer precise, unabstracted specifications in their datatypes should come away with new motivation to take a second look at datatype genericity; others may find one or two new tricks to add to their toolkits.
16 |
--------------------------------------------------------------------------------
/app/content/presentation/presentation--synchronisation-und-immutability.markdown:
--------------------------------------------------------------------------------
1 | ---
2 | title: Synchronisation und Immutability
3 | url-video: https://www.youtube.com/watch?v=imYJEZJ239I
4 | url-slides: http://bobkonf.de/2016/slides/bernauer.pdf
5 | authors:
6 | - Andreas Bernauer
7 | source: http://bobkonf.de/2016/bernauer.html
8 | conference: BOB2016
9 | tags:
10 | libraries:
11 | ---
12 |
13 | Was tun, wenn der Datenbestand vieler mobiler Geräte wie Handys oder Tablets untereinander synchronisiert werden muss? So einfach das Problem zu beschreiben ist, macht es doch vielen Entwicklern Kopfschmerzen. Viele Probleme kommen daher, dass Datenbestände konventionell strukturiert in Datenbanken untergebracht werden. Funktionale Programmierung, unveränderliche Daten und Event Sourcing vereinfachen das Problem deutlich. . Berichtet wird aus einem Projekt bei einem großen Automobildienstleister, der 1500 Tablets mit Konfigurationsdaten im Einsatz hat, die untereinander abgeglichen werden müssen.
14 |
--------------------------------------------------------------------------------
/app/content/paper/theorem-proving-for-all.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Theorem Proving For All
3 | paper-url: https://arxiv.org/pdf/1806.03541.pdf
4 | authors:
5 | - Niki Vazou
6 | - Joachim Breitner
7 | - Will Kunkel
8 | - David Van Horn
9 | - Graham Hutton
10 | tags:
11 | - Refinement Types
12 | libraries:
13 | - liquidhaskell
14 | ---
15 |
16 | Equational reasoning is one of the key features of pure functional languages such as Haskell. To date, however, such reasoning always took place externally to Haskell, either manually on paper, or mechanised in a theorem prover. This article shows how equational reasoning can be performed directly and seamlessly within Haskell itself, and be checked using Liquid Haskell. In particular, language learners --- to whom external theorem provers are out of reach --- can benefit from having their proofs mechanically checked. Concretely, we show how the equational proofs and derivations from Graham's textbook can be recast as proofs in Haskell (spoiler: they look essentially the same).
17 |
--------------------------------------------------------------------------------
/app/ui/elements/permission-file.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | No permission to replicate on HaskAnything (reference only)
8 |
9 |
10 |
11 | Content can refer to a permission file that describes how and why something is permitted to be replicated on HaskAnything.
12 | These documents do not necessarily have to be legal jargon - they are there to indicate that the author knows of the replication and gives his or her permission to do so.
13 | Here is an example.
14 | Create a new permission file.
15 |
16 |
36 |
37 |
--------------------------------------------------------------------------------
/app/content/presentation/presentation--advanced-functional-programming-in-industry.markdown:
--------------------------------------------------------------------------------
1 | ---
2 | title: Advanced functional programming in industry
3 | url-video: https://www.youtube.com/watch?v=vWiQdZeY2Bk
4 | url-slides: http://bobkonf.de/2015/slides/magalhaes.pdf
5 | authors:
6 | - José Pedro Magalhães
7 | source: http://bobkonf.de/2015/magalhaes.html
8 | conference: BOB2015
9 | tags:
10 | libraries:
11 | - haskore
12 | - HarmTrace
13 | - FComp
14 | ---
15 |
16 | Advanced functional programming is commonplace in academia. In this talk I will explain why it is time to bring its advantages to industry too. Through my experience with Chordify, a web start-up that brings chord recognition to the masses, I have explored the benefits of exposing open-source, cutting-edge research to a wider audience. I will share several insights gained from my experience, namely with regards to: the architecture of a functional backend, interaction between this backend and a PHP/JS frontend, handling millions of visits per month with minimal hassle, and the logistics of an internet start-up.
17 |
--------------------------------------------------------------------------------
/app/content/presentation/adventure-with-types-in-haskell-pt1.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Adventure with Types in Haskell - Part 1"
3 | url-video: "https://www.youtube.com/watch?v=6COvD8oynmI"
4 | url-slides: "https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/ClassesJimOPLSS.pdf"
5 | authors:
6 | - Simon Peyton Jones
7 | source: https://www.youtube.com/watch?v=6COvD8oynmI
8 | tags:
9 | libraries:
10 | ---
11 |
12 | Recorded at Oregon Programming Languages Summer School 2013. https://www.cs.uoregon.edu/research/summerschool/summer13/curriculum.html
13 |
14 | Lecture 1 Slides: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/ClassesJimOPLSS.pdf
15 |
16 | System F in GHC: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/FC_in_GHC_July13.pdf
17 |
18 | Kinds and GADTs: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/Kinds_and_GADTs.pdf
19 |
20 | Type Inference: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/Type_inference.pdf
21 |
22 | Fun with Type Functions: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/FunWithTypeFuns.pdf
23 |
--------------------------------------------------------------------------------
/app/content/presentation/adventure-with-types-in-haskell-pt2.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Adventure with Types in Haskell - Part 2"
3 | url-video: "https://www.youtube.com/watch?v=brE_dyedGm0"
4 | url-slides: "https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/ClassesJimOPLSS.pdf"
5 | authors:
6 | - Simon Peyton Jones
7 | source: https://www.youtube.com/watch?v=brE_dyedGm0
8 | tags:
9 | libraries:
10 | ---
11 |
12 | Recorded at Oregon Programming Languages Summer School 2013. https://www.cs.uoregon.edu/research/summerschool/summer13/curriculum.html
13 |
14 | Lecture 1 Slides: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/ClassesJimOPLSS.pdf
15 |
16 | System F in GHC: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/FC_in_GHC_July13.pdf
17 |
18 | Kinds and GADTs: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/Kinds_and_GADTs.pdf
19 |
20 | Type Inference: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/Type_inference.pdf
21 |
22 | Fun with Type Functions: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/FunWithTypeFuns.pdf
23 |
--------------------------------------------------------------------------------
/app/content/presentation/presentation-a-sensible-intro-to-frp.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: A Sensible Intro to FRP
3 | url-video: "https://player.vimeo.com/external/176422593.sd.mp4?s=2481d98f0eb01f71691218cffbee74919713d116"
4 | url-slides: http://jelv.is/talks/frp-2016/
5 | authors:
6 | - Tikhon Jelvis
7 | source: https://begriffs.com/posts/2016-07-27-tikhon-on-frp.html
8 | conference:
9 | tags:
10 | - Functional Reactive Programming (FRP)
11 | libraries:
12 | - reactive-banana
13 | - threepenny-gui
14 | - reflex
15 | ---
16 |
17 | Introduction to the concept of FRP (Functional Reactive Programming), supplemented with a guided tour through an example implementation of [Game of Life](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life) using the [reactive-banana](https://hackage.haskell.org/package/reactive-banana) and [threepenny-gui](https://hackage.haskell.org/package/threepenny-gui) libraries. Subsequent discussion of the [reflex](https://hackage.haskell.org/package/reflex) library and FRP as a possible replacement for monadic `IO`. See [video URL](https://begriffs.com/posts/2016-07-27-tikhon-on-frp.html) for a detailed summary.
18 |
--------------------------------------------------------------------------------
/app/content/presentation/adventure-with-types-in-haskell-pt3.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Adventure with Types in Haskell - Part 3"
3 | url-video: "https://www.youtube.com/watch?v=2IZQx7WNOMs"
4 | url-slides: "https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/FC_in_GHC_July13.pdf"
5 | authors:
6 | - Simon Peyton Jones
7 | source: https://www.youtube.com/watch?v=2IZQx7WNOMs
8 | tags:
9 | - System FC
10 | libraries:
11 | ---
12 |
13 | Recorded at Oregon Programming Languages Summer School 2013. https://www.cs.uoregon.edu/research/summerschool/summer13/curriculum.html
14 |
15 | Lecture 1 Slides: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/ClassesJimOPLSS.pdf
16 |
17 | System F in GHC: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/FC_in_GHC_July13.pdf
18 |
19 | Kinds and GADTs: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/Kinds_and_GADTs.pdf
20 |
21 | Type Inference: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/Type_inference.pdf
22 |
23 | Fun with Type Functions: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/FunWithTypeFuns.pdf
24 |
--------------------------------------------------------------------------------
/app/content/presentation/adventure-with-types-in-haskell-pt4.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Adventure with Types in Haskell - Part 4"
3 | url-video: "https://www.youtube.com/watch?v=XtogTwzcGcM"
4 | url-slides: "https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/FunWithTypeFuns.pdf"
5 | authors:
6 | - Simon Peyton Jones
7 | source: https://www.youtube.com/watch?v=XtogTwzcGcM
8 | tags:
9 | - System FC
10 | libraries:
11 | ---
12 |
13 | Recorded at Oregon Programming Languages Summer School 2013. https://www.cs.uoregon.edu/research/summerschool/summer13/curriculum.html
14 |
15 | Lecture 1 Slides: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/ClassesJimOPLSS.pdf
16 |
17 | System F in GHC: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/FC_in_GHC_July13.pdf
18 |
19 | Kinds and GADTs: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/Kinds_and_GADTs.pdf
20 |
21 | Type Inference: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/Type_inference.pdf
22 |
23 | Fun with Type Functions: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/FunWithTypeFuns.pdf
24 |
--------------------------------------------------------------------------------
/app/content/presentation/distributed-programming-in-haskell.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Distributed Programming in Haskell"
3 | url-video: "https://www.youtube.com/watch?v=qlnU73a3Cw0"
4 | url-slides: "https://github.com/meiersi/HaskellerZ/blob/master/meetups/20150530-ZuriHac2015_Mathieu_Boespflug-Distributed_Programming/ZuriHac15%20talk-%20distributed%20haskell.pdf"
5 | authors:
6 | - Mathieu Boespflug
7 | source: https://www.youtube.com/watch?v=qlnU73a3Cw0
8 | tags:
9 | - Distributed Programming
10 | - Cloud Haskell
11 | - XStaticPointers
12 | libraries:
13 | ---
14 |
15 | Shifting from building compilers and desktop applications to online services and mobile apps means that Haskell programming is increasingly about building systems, not standalone data-in data-out contraptions. Systems that are distributed across anything from a handful to millions of machines.
16 |
17 | We'll look at what Haskell has to offer for building robust and scalable distributed systems, starting from the paradigms popularized in other languages to more idiomatic, safe and composable models.
18 |
19 | Code can be found at: https://github.com/mboes/zurihac15-talk-examples
20 |
--------------------------------------------------------------------------------
/app/content/presentation/functional-reactive-programming-refactored.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Functional Reactive Programming, Refactored"
3 | url-video: "https://www.youtube.com/watch?v=FmwOd4z9LdM"
4 | url-slides: "about:blank"
5 | authors:
6 | - Ivan Perez
7 | - Manuel Barenz
8 | - Henrik Nilsson
9 | source: http://icfp16.sigplan.org/event/haskellsymp-2016-papers-functional-reactive-programming-refactored
10 | tags:
11 | - Functional Reactive Programming (FRP)
12 | - Benchmark
13 | libraries:
14 | - Yampa
15 | ---
16 |
17 | Functional Reactive Programming (FRP) has come to mean many things. Yet, scratch the surface of the multitude of realisations, and there is great commonality between them. This paper investigates this commonality, turning it into a mathematically coherent and practical FRP realisation that allows us to express the functionality of many existing FRP systems and beyond by providing a minimal FRP core parameterised on a monad. We give proofs for our theoretical claims and we have verified the practical side by benchmarking a set of existing, non-trivial Yampa applications running on top of our new system with very good results.
18 |
--------------------------------------------------------------------------------
/app/content/series/adventure-with-types-series.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Adventure with Types in Haskell
3 | dates:
4 | - 23-01-2015
5 | list:
6 | - presentation/adventure-with-types-in-haskell-pt1.md
7 | - presentation/adventure-with-types-in-haskell-pt2.md
8 | - presentation/adventure-with-types-in-haskell-pt3.md
9 | - presentation/adventure-with-types-in-haskell-pt4.md
10 | type: video-series
11 | tags:
12 | libraries:
13 | ---
14 |
15 | Recorded at Oregon Programming Languages Summer School 2013. https://www.cs.uoregon.edu/research/summerschool/summer13/curriculum.html
16 |
17 | Lecture 1 Slides: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/ClassesJimOPLSS.pdf
18 |
19 | System F in GHC: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/FC_in_GHC_July13.pdf
20 |
21 | Kinds and GADTs: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/Kinds_and_GADTs.pdf
22 |
23 | Type Inference: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/Type_inference.pdf
24 |
25 | Fun with Type Functions: https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/FunWithTypeFuns.pdf
26 |
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/sk.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sk",[],function(){var e={2:function(e){return e?"dva":"dve"},3:function(){return"tri"},4:function(){return"štyri"}};return{inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím, zadajte o jeden znak menej":n>=2&&n<=4?"Prosím, zadajte o "+e[n](!0)+" znaky menej":"Prosím, zadajte o "+n+" znakov menej"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím, zadajte ešte jeden znak":n<=4?"Prosím, zadajte ešte ďalšie "+e[n](!0)+" znaky":"Prosím, zadajte ešte ďalších "+n+" znakov"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(t){return t.maximum==1?"Môžete zvoliť len jednu položku":t.maximum>=2&&t.maximum<=4?"Môžete zvoliť najviac "+e[t.maximum](!1)+" položky":"Môžete zvoliť najviac "+t.maximum+" položiek"},noResults:function(){return"Nenašli sa žiadne položky"},searching:function(){return"Vyhľadávanie…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/content/presentation/causal-commutative-arrows-revisited.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Causal Commutative Arrows Revisited"
3 | url-video: "https://www.youtube.com/watch?v=bnFHYsL4QNc"
4 | url-slides: "http://www.thev.net/PaulLiu/download/cca-revisit-slides.pdf"
5 | authors:
6 | - Jeremy Yallop
7 | - Hai Liu
8 | source: http://icfp16.sigplan.org/event/haskellsymp-2016-papers-causal-commutative-arrows-revisited
9 | tags:
10 | - Arrows
11 | libraries:
12 | ---
13 |
14 | Causal commutative arrows (CCA) extend arrows with additional constructs and laws that make them suitable for modelling domains such as functional reactive programming, differential equations and synchronous dataflow.
15 |
16 | Earlier work has revealed that a syntactic transformation of CCA computations into normal form can result in significant performance improvements, sometimes increasing the speed of programs by orders of magnitude.
17 |
18 | In this work we reformulate the normalization as a type class instance and derive optimized observation functions via a specialization to stream transformers to demonstrate that the same dramatic improvements can be achieved without leaving the language.
19 |
--------------------------------------------------------------------------------
/app/js/series-types.js:
--------------------------------------------------------------------------------
1 | function loadSeriesTypes() {
2 | var dropdowns = [
3 | ["../../json/series-types.json",'#type-series'],
4 | ];
5 |
6 | var id = '#type-series';
7 |
8 | var onDropdownCallback = function(data) {
9 |
10 | // If the JSON doesn't contain "default" yet, add it.
11 | if ( !R.contains(data,"default") ) {
12 | data.push( "default" );
13 | }
14 |
15 | var options = R.map( function(item) { return ''; } )( data );
16 | jQuery(id).append(options);
17 |
18 | // Initialize select2 plugin.
19 | jQuery(id).select2({
20 | });
21 |
22 | // Select the default.
23 | jQuery(id + ' option:contains("default")').attr('selected',true);
24 |
25 | // Inform select2.
26 | jQuery(id).trigger('change.select2');
27 |
28 | };
29 |
30 | // Turn loadDropdownWith into a curried function.
31 | var f = R.curry(loadDropdownWith);
32 |
33 | f = f(onDropdownCallback);
34 |
35 | jQuery(document).ready(function() {
36 | // Map over the dropdowns.
37 | R.map ( R.apply( f ), dropdowns );
38 | });
39 | }
40 |
41 | loadSeriesTypes();
42 |
--------------------------------------------------------------------------------
/app/vendor/select2/js/i18n/cs.js:
--------------------------------------------------------------------------------
1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */
2 |
3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/cs",[],function(){function e(e,t){switch(e){case 2:return t?"dva":"dvě";case 3:return"tři";case 4:return"čtyři"}return""}return{errorLoading:function(){return"Výsledky nemohly být načteny."},inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím zadejte o jeden znak méně":n<=4?"Prosím zadejte o "+e(n,!0)+" znaky méně":"Prosím zadejte o "+n+" znaků méně"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím zadejte ještě jeden znak":n<=4?"Prosím zadejte ještě další "+e(n,!0)+" znaky":"Prosím zadejte ještě dalších "+n+" znaků"},loadingMore:function(){return"Načítají se další výsledky…"},maximumSelected:function(t){var n=t.maximum;return n==1?"Můžete zvolit jen jednu položku":n<=4?"Můžete zvolit maximálně "+e(n,!1)+" položky":"Můžete zvolit maximálně "+n+" položek"},noResults:function(){return"Nenalezeny žádné položky"},searching:function(){return"Vyhledávání…"}}}),{define:e.define,require:e.require}})();
--------------------------------------------------------------------------------
/app/content/series/conference-bob-2015.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: BOB 2015 Konferenz
3 | dates:
4 | - 23-01-2015
5 | list:
6 | - presentation/presentation--advanced-functional-programming-in-industry.markdown
7 | - presentation/presentation--programming-workflows-with-grammars.markdown
8 | - presentation/presentation--eins-nach-dem-anderen-konfiguration-mit-modellbasierten-abhängigkeiten.markdown
9 | - presentation/presentation--praktische-erfahrungen-mit-gpu-programmierung-in-haskell.markdown
10 | - presentation/presentation--clutching-a-grip-on-autosar-using-haskell.markdown
11 | type: conference
12 | tags:
13 | libraries:
14 | ---
15 |
16 | Object-oriented development and its platforms have been well-established for years in software development. By now, a new arsenal of techniques, technologies, platforms, and languages are determining the development practices of the future. These are often superior to traditional OO techniques, languages and tools.
17 |
18 | This series contains the presentations of 2015, focused on, or related to Haskell.
19 |
20 | Topics
21 |
22 | * functional programming
23 | * reactive programming
24 | * persistent data structures and databases
25 | * types
26 | * formal methods for correctness and robustness
27 |
--------------------------------------------------------------------------------
/app/content/presentation/presentation-functional-programming-at-lumiguide.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Functional Programming at LumiGuide
3 | url-video: https://www.youtube.com/watch?v=IKznN_TYjZk
4 | url-slides: https://github.com/meiersi/HaskellerZ/raw/master/meetups/20160722-ZuriHac2016_Bas_van_Dijk_FP-at-LumiGuide/Bas_van_Dijk-FP_at_LumiGuide-ZuriHac2016.pptx
5 | authors:
6 | - Bas van Dijk
7 | source: https://www.reddit.com/r/haskell/comments/51uaxw/zurihac_2016_functional_programming_at_lumiguide/
8 | conference: ZuriHac 2016
9 | tags: GHCJS,Machine Learning,Nix,Computer Vision
10 | libraries: haskell-opencv,blaze-react,inline-c
11 | ---
12 |
13 | I will give an introduction to LumiGuide and talk about how we use Haskell to build our bicycle detection and guidance systems. The first part of the talk will be non-technical but in the second part I will dive deep into haskell-opencv: a Haskell to OpenCV 3.1 binding that we recently open sourced. Roel van Dijk and I will do a live coding session showing how to bind a function from OpenCV to Haskell. Along the way we demonstrate the use of the inline-c library, describe how we handle C++ exceptions and show how we are using advanced type system features to encode more information into the type of matrices.
14 |
--------------------------------------------------------------------------------
/.circleci/config.yml:
--------------------------------------------------------------------------------
1 | # This is the configuration file for circleci.com (CI which builds the site)
2 | version: 2
3 |
4 | workflows:
5 | version: 2
6 | build_and_test:
7 | jobs:
8 | - build
9 |
10 | jobs:
11 | build:
12 | docker:
13 | - image: romanandreg/stack:latest
14 |
15 | steps:
16 | - checkout
17 | - run: apt-get update && apt-get install git -y
18 | - restore_cache:
19 | key: build-cache-{{ checksum "stack.yaml" }}
20 | - run: stack setup
21 | - run: stack build --only-dependencies -j1
22 | - run: stack install
23 | - save_cache:
24 | key: build-cache-{{ checksum "stack.yaml" }}
25 | paths:
26 | - /root/.stack
27 | - /root/.cabal
28 | - .stack-work
29 | - run: make build
30 | - run:
31 | name: Skip this job for Pull Requests
32 | command: '[[ -v CIRCLE_PR_NUMBER ]] && circleci step halt || true'
33 | - run:
34 | name: Avoid hosts unknown for github
35 | command: mkdir ~/.ssh/ && echo -e "Host github.com\n\tStrictHostKeyChecking no\n" > ~/.ssh/config
36 | - run: if [ $CIRCLE_BRANCH = "master" ]; then make deploy; else echo "Pull request test, skipping push."; fi
37 |
--------------------------------------------------------------------------------
/app/content/presentation/desugaring-haskells-do-notation-into-applicative-operations.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Desugaring Haskell's do-Notation into Applicative Operations"
3 | url-video: "https://www.youtube.com/watch?v=6WM4gFP7rs4"
4 | url-slides: "about:blank"
5 | authors:
6 | - Simon Marlow
7 | - Simon Peyton Jones
8 | - Edward Kmett
9 | - Andrey Mokhov
10 | source: http://icfp16.sigplan.org/event/haskellsymp-2016-papers-desugaring-haskell-s-do-notation-into-applicative-operations
11 | tags:
12 | - GHC
13 | - Haskell In Production
14 | libraries:
15 | ---
16 |
17 | Monads have taken the world by storm, and are supported by
18 | do-notation (at least in Haskell). Programmers are increasingly
19 | waking up to the usefulness and ubiquity of Applicatives, but they
20 | have so far been hampered by the absence of supporting notation.
21 |
22 | In
23 | this paper we show how to re-use the very same do-notation to work
24 | for Applicatives as well, providing efficiency benefits for some types
25 | that are both Monad and Applicative, and syntactic convenience for
26 | those that are merely Applicative. The result is fully implemented
27 | as an optional extension in GHC, and is in use at Facebook to make
28 | it easy to write highly-parallel queries in a distributed system.
29 |
--------------------------------------------------------------------------------
/app/content/presentation/how-to-twist-pointers-without-breaking-them.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "How to Twist Pointers without Breaking Them"
3 | url-video: "https://www.youtube.com/watch?v=f607zpe8-V8"
4 | url-slides: "about:blank"
5 | authors:
6 | - Satvik Chauhan
7 | - Piyush Kurur
8 | - Brent Yorgey
9 | source: http://icfp16.sigplan.org/event/haskellsymp-2016-papers-how-to-twist-pointers-without-breaking-them
10 | tags:
11 | - Category Theory
12 | - Cryptography
13 | libraries:
14 | - raaz
15 | ---
16 |
17 | Using the theory of monoids and monoid actions, we give a unified framework that handles three common pointer manipulation tasks, namely, data serialisation, deserialisation, and memory allocation. Our main theoretical contribution is the formulation of the notion of a *twisted functor*, a generalisation of the semi-direct product construction for monoids. We show that semi-direct products and twisted functors are particularly well suited as an abstraction for many pointer manipulation tasks.
18 |
19 | We describe the implementation of these abstractions in the context of a cryptographic library for Haskell. Twisted functors allow us to abstract all pointer arithmetic and size calculations into a few lines of code, significantly reducing the opportunities for buffer overflows.
20 |
--------------------------------------------------------------------------------
/app/content/series/conference-compose-2016.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Compose Conference 2016
3 | dates:
4 | - 04-02-2016
5 | - 05-02-2016
6 | list:
7 | - presentation/presentation-how-to-bake-how-to-bake-pi-reflections-on-making-abstract-math-palatable.md
8 | - presentation/the-intersection-of-machine-learning-types-and-testing.markdown
9 | - presentation/presentation-add-a-type-parameter-one-simple-design-change-a-panoply-of-outcomes.md
10 | - presentation/presentation-dynamic-typing-in-ghc.md
11 | - presentation/presentation--there-and-back-again-and-what-happened-after.md
12 | - presentation/presentation--improving-type-error-localization-for-languages-with-type-inference.md
13 | - presentation/presentation-cryptography-and-verification-with-cryptol.md
14 | - presentation/presentation--fltkhs-easy-native-guis-in-haskell-today.md
15 | - presentation/presentation--fun-with-GHCJSi.md
16 | - presentation/presentation--liquid-types-for-haskell.md
17 | - presentation/presentation--analyzing-programs-with-z3.md
18 | type: conference
19 | tags:
20 | libraries:
21 | ---
22 |
23 | C◦mp◦se is a conference for functional programmers, focused on technologies such as Haskell, Scala, Clojure, OCaml, F#, SML and others.
24 |
25 | This series contains the presentations of 2016, focused on Haskell.
26 |
--------------------------------------------------------------------------------
/app/content/presentation/fitspec-refining-property-sets-for-functional-testing.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "FitSpec: Refining Property Sets for Functional Testing"
3 | url-video: "https://www.youtube.com/watch?v=1oQ1TulCdP4"
4 | url-slides: "about:blank"
5 | authors:
6 | - Rudy Braquehais
7 | - Colin Runciman
8 | source: http://icfp16.sigplan.org/event/haskellsymp-2016-papers-fitspec-refining-property-sets-for-functional-testing
9 | tags:
10 | - Property-based testing
11 | - Testing
12 | libraries:
13 | - fitspec
14 | ---
15 |
16 | This paper presents FitSpec, a tool providing automated assistance in the task of refining sets of test properties for Haskell functions. FitSpec tests mutant variations of functions under test against a given property set, recording any surviving mutants that pass all tests. The number of surviving
17 | mutants and any smallest survivor are presented to the user. A surviving mutant indicates incompleteness of the property set, prompting the user to amend a property or to add a new one, making the property set stronger. Based on the same test results, FitSpec also provides conjectures in the form of equivalences and implications between property subsets. These conjectures help the user to identify minimal core subsets of properties and so to reduce the cost of future property-based testing.
18 |
--------------------------------------------------------------------------------
/app/content/presentation/presentation--analyzing-programs-with-z3.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Analyzing Programs with Z3
3 | url-video: https://www.youtube.com/watch?v=ruNFcH-KibY
4 | url-slides: jelv.is/talks/compose-2016/slides.html
5 | authors:
6 | - Tikhon Jelvis
7 | source: http://www.composeconference.org/2016/speakers/
8 | conference: Compose2016
9 | tags:
10 | - Z3
11 | - Liquid Types
12 | - Refinement Types
13 | - Program Analysis
14 | libraries:
15 | ---
16 |
17 | SMT solvers are widely used in research to analyze and verify programs. This lets us check invariants and compare programs against a spec exhaustively, with bounds on the number of loop iterations and the size of the heap. SMT solvers are also useful for other sorts of analysis including sophisticated type checking (like refinement types in Liquid Haskell) and fields other than program analysis (like security research where they can be used to analyze cryptographic algorithms and protocols).
18 |
19 | I’ll demonstrate how to compile a simple language to an SMT formula and analyze programs using the Haskell Z3 bindings. Z3 has bindings in other languages including OCaml and .NET, so these ideas will be immediately useful to everyone even if the details are slightly different from the Haskell code. The underlying ideas will also help people approach other problems with Z3.
20 |
--------------------------------------------------------------------------------
/app/content/presentation/experience-report-developing-high-perf-http-server-in-haskell.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Experience Report: Developing High Performance HTTP/2 Server in Haskell"
3 | url-video: "https://www.youtube.com/watch?v=YUiG0faZw8Y"
4 | url-slides: "about:blank"
5 | authors:
6 | - Kazuhiko Yamamoto
7 | source: http://icfp16.sigplan.org/event/haskellsymp-2016-papers-experience-report-developing-high-performance-http-2-server-in-haskell
8 | tags:
9 | - Haskell In Production
10 | - Web Application
11 | - Benchmark
12 | libraries:
13 | - warp
14 | ---
15 |
16 | While the speed of the Internet has been increasing,
17 | HTTP/1.1 has been plagued by
18 | head-of-line blocking, low concurrency and redundant headers.
19 | To solve these problems, HTTP/2 was standardized.
20 |
21 | This paper summarizes our experience implementing HTTP/2 in Haskell.
22 | We found several techniques to improve the performance of
23 | the header compression
24 | and identified a suitable data structure for HTTP/2 priority.
25 |
26 | Also, we showed that Haskell lightweight threads
27 | are useful for HTTP/2 where
28 | the common tactics of one lightweight thread per connection cannot be used.
29 |
30 | The HTTP/2 implementation of Warp,
31 | the popular HTTP server library in Haskell,
32 | ultimately provides better throughput than its HTTP/1.1 counterpart.
33 |
--------------------------------------------------------------------------------
/src/HaskAnything/Internal/Content.hs:
--------------------------------------------------------------------------------
1 | {-# LANGUAGE OverloadedStrings #-}
2 |
3 | module HaskAnything.Internal.Content where
4 |
5 | import Hakyll
6 | import qualified Data.List as L
7 |
8 | matchContent :: String -> Context String -> Rules ()
9 | matchContent name ctx = do
10 | let path = fromGlob ("content/" ++ name ++ "/*")
11 | match path $ do
12 | route $ setExtension "html"
13 | let template = fromFilePath ("templates/content/" ++ name ++ ".html")
14 | compile $ pandocCompiler
15 | >>= loadAndApplyTemplate template ctx
16 | >>= loadAndApplyTemplate "templates/content.html" ctx
17 | >>= loadAndApplyTemplate "templates/default.html" ctx
18 | >>= relativizeUrls
19 |
20 | -- Given a list of Items, a function that uses an Item's identifier to get something else of type b, and a comparison function to deduplicate said list of Items, gives you the deduplicated list.
21 | deduplicateContentBy :: (Eq c) => (Identifier -> Compiler b) -> (b -> c) -> [Item a] -> Compiler [Item a]
22 | deduplicateContentBy identFunc compareFunc is = do
23 | let idents = map itemIdentifier is
24 | allValues <- sequence (map identFunc idents)
25 | let dedup = L.nubBy (\r1 r2 -> let cmp = compareFunc . fst in cmp r1 == cmp r2) (zip allValues is)
26 | return $ map snd dedup
--------------------------------------------------------------------------------
/app/content/presentation/presentation-a-taste-of-haskell-part-1.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: A Taste of Haskell - Part 1
3 | url-video: https://www.youtube.com/watch?v=jLj1QV11o9g
4 | url-slides: http://www.slideshare.net/oscon2007/os-peytonjones
5 | authors:
6 | - Simon Peyton Jones
7 | source: https://wiki.haskell.org/Video_presentations
8 | conference: OSCON 2007
9 | tags:
10 | libraries:
11 | ---
12 |
13 | Haskell is the world's leading purely functional programming language that offers a radical and elegant attack on the whole business of writing programs. In the last two or three years there has been an explosion of interest in Haskell, and it is now being used for a bewildering variety of applications.
14 | In this tutorial, I will try to show you why programming in Haskell is such fun, and how it makes you think about programming in a new way.
15 |
16 | I'm going to use xmonad (http://xmonad.org) as my running example; it's an X11 window manager written entirely in 500 lines of Haskell. Based on xmonad I will show you how to
17 |
18 | ► write functional programs
19 | ► test them using QuickCheck
20 | ► write imperative programs
21 | ► call foreign functions
22 | ► use Haskell for scripting applications
23 |
24 | I won't assume you know any functional programming at all, but I will assume that you are an experienced professional programmer, so I will move along quite briskly.
25 |
--------------------------------------------------------------------------------
/app/content/presentation/presentation-a-taste-of-haskell-part-2.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: A Taste of Haskell - Part 2
3 | url-video: https://www.youtube.com/watch?v=IqXTUbdLig0
4 | url-slides: http://www.slideshare.net/oscon2007/os-peytonjones
5 | authors:
6 | - Simon Peyton Jones
7 | source: https://wiki.haskell.org/Video_presentations
8 | conference: OSCON 2007
9 | tags:
10 | libraries:
11 | ---
12 |
13 | Haskell is the world's leading purely functional programming language that offers a radical and elegant attack on the whole business of writing programs. In the last two or three years there has been an explosion of interest in Haskell, and it is now being used for a bewildering variety of applications.
14 | In this tutorial, I will try to show you why programming in Haskell is such fun, and how it makes you think about programming in a new way.
15 |
16 | I'm going to use xmonad (http://xmonad.org) as my running example; it's an X11 window manager written entirely in 500 lines of Haskell. Based on xmonad I will show you how to
17 |
18 | - write functional programs
19 | - test them using QuickCheck
20 | - write imperative programs
21 | - call foreign functions
22 | - use Haskell for scripting applications
23 |
24 | I won't assume you know any functional programming at all, but I will assume that you are an experienced professional programmer, so I will move along quite briskly.
25 |
--------------------------------------------------------------------------------
/app/content/series/conference-icfp-2016.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: ICFP Haskell Symposium 2016
3 | dates:
4 | - 22-09-2016
5 | - 23-09-2016
6 | list:
7 | - presentation/fitspec-refining-property-sets-for-functional-testing.md
8 | - presentation/quickfuzz-an-automatic-random-fuzzer-for-common-file-formats.md
9 | - presentation/causal-commutative-arrows-revisited.md
10 | - presentation/functional-reactive-programming-refactored.md
11 | - presentation/free-delivery.md
12 | - presentation/how-to-twist-pointers-without-breaking-them.md
13 | - presentation/high-perf-client-side-web-apps-through-edsls.md
14 | - presentation/experience-report-developing-high-perf-http-server-in-haskell.md
15 | - presentation/pattern-synonyms.md
16 | - presentation/desugaring-haskells-do-notation-into-applicative-operations.md
17 | - presentation/reivisiting-stm-in-haskell.md
18 | - presentation/autobahn-using-gentic-algorithms-to-infer-strictness-annotations.md
19 |
20 | type: conference
21 | tags:
22 | libraries:
23 | ---
24 |
25 | ICFP 2016 is the 21st ACM SIGPLAN International Conference on Functional Programming.
26 |
27 | ICFP provides a forum for researchers and developers to hear about the latest work on the design, implementations, principles, and uses of functional programming. The conference covers the entire spectrum of work, from practice to theory, including its peripheries.
28 |
--------------------------------------------------------------------------------
/app/js/dropdowns.js:
--------------------------------------------------------------------------------
1 | function loadDropdown( select2Settings, url, id ) {
2 | jQuery.ajax( url )
3 | .done( function(data) {
4 | var options = R.map( function(item) { return ''; } )( data );
5 | jQuery(id).append(options);
6 |
7 | // Initialize select2 plugin.
8 | jQuery(id).select2(select2Settings);
9 |
10 | }).fail(function(xhr, ajaxOptions, thrownError) {
11 | console.log("failed to load dropdown " + id);
12 | console.log(xhr);
13 | console.log(ajaxOptions);
14 | console.log(thrownError);
15 | });
16 | }
17 |
18 | function loadDropdownWith( onDoneCallback, url, id ) {
19 | jQuery.ajax( url )
20 | .done(onDoneCallback).fail(function(xhr, ajaxOptions, thrownError) {
21 | console.log("failed to load dropdown " + id);
22 | console.log(xhr);
23 | console.log(ajaxOptions);
24 | console.log(thrownError);
25 | });
26 | }
27 |
28 | function loadDropdowns( dropDowns, select2Settings ) {
29 | // Turn loadDropdown into a curried function.
30 | var f = R.curry(loadDropdown);
31 |
32 | jQuery(document).ready(function() {
33 | // Map over the dropdowns, passing in the select2 settings.
34 | R.map ( R.apply( f( select2Settings ) ), dropDowns );
35 | });
36 | }
37 |
--------------------------------------------------------------------------------
/app/content/presentation/the-intersection-of-machine-learning-types-and-testing.markdown:
--------------------------------------------------------------------------------
1 | ---
2 | title: The Intersection of Machine Learning, Types and Testing
3 | url-video: https://www.youtube.com/watch?v=czZ18YtZlaw
4 | url-slides: http://rleonid.github.io/slides/oml/compose2016/#/
5 | authors:
6 | - Leonid Rozenberg
7 | source: http://www.composeconference.org/2016/program/
8 | conference: Compose2016
9 | tags:
10 | - statistics
11 | - ml
12 | libraries:
13 | - oml
14 | ---
15 |
16 | The proposed talk would have two broad themes. The first would be a quick survey of the Oml library that I helped to develop, that aims to provide mathematical, statistical and general machine learning capabilities for the OCaml programming environment. This would be a quick (and hopefully live) demo. The second part of the talk would be about my experiences. In particular, I’d like to discuss the difficulty of testing this library and what roles types can play.
17 |
18 | I’ve used F# and now OCaml to analyze data professionally for the past 10 years. Now at Hammer Lab, I’ve used some of the algorithms in this library to analyze a protein binding problem. I find working in the REPL an invaluable (and intuitive) experience for exploratory data analysis; types force the developer to be concise in their transformation of complex data. At the same time Oml aims to be easy in transforming that data into numerical patterns.
19 |
--------------------------------------------------------------------------------
/app/content/presentation/pattern-synonyms.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Pattern Synonyms"
3 | url-video: "https://www.youtube.com/watch?v=Zv4u3OZzsZo"
4 | url-slides: "about:blank"
5 | authors:
6 | - Matthew Pickering
7 | - Gergo Erdi
8 | - Simon Peyton Jones
9 | - Richard Eisenberg
10 | source: http://icfp16.sigplan.org/event/haskellsymp-2016-papers-pattern-synonyms
11 | tags:
12 | - GHC
13 | libraries:
14 | ---
15 |
16 | Pattern matching has proven to be a convenient, expressive way of inspecting data. Yet this language feature, in its traditional form, is limited: patterns must be data constructors of concrete data types. No computation or abstraction is allowed. The data type in question must be concrete, with no ability to enforce any invariants. Any change in this data type requires all clients to update their code.
17 |
18 | This paper introduces pattern synonyms, which allow programmers to abstract over patterns, painting over all the shortcomings listed above. Pattern synonyms are assigned types, enabling a compiler to check the validity of a synonym independent of its definition. These types are intricate; detailing how to assign a type to a pattern synonym is a key contribution of this work. We have implemented pattern synonyms in the Glasgow Haskell Compiler, where they have enjoyed immediate popularity, but we believe this feature could easily be exported to other languages that support pattern matching.
19 |
--------------------------------------------------------------------------------
/app/content/presentation/presentation-dynamic-typing-in-ghc.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Dynamic Typing in GHC
3 | url-video: https://www.youtube.com/watch?v=asdABzBUoGM
4 | url-slides: about:blank
5 | authors:
6 | - Stephanie Weirich
7 | source: http://www.composeconference.org/2016/speakers/
8 | conference: Compose2016
9 | tags:
10 | libraries:
11 | ---
12 |
13 | The ability to perform type tests at runtime blurs the line between statically-typed and dynamically-typed languages. Recent developments in Haskell’s type system allow even programs that use reflection to themselves be statically typed, using a type-indexed runtime representation of types called TypeRep.
14 |
15 | The Glasgow Haskell Compiler currently supports the definition of a Dynamic type through the use of the Typeable type class. This definition works well with Haskell’s open universe of types. All new types are automatically convertible to type Dynamic. However, this implementation of Dynamic is also unsafe: the implementation of operations such as dynApply—which applies one Dynamic as a function to another—requires unsafeCoerce.
16 |
17 | In this talk, I will present an improved interface in the Typeable type class, leading to a safer implementation of type Dynamic. Our revised Typeable class requires a new feature, kind equalities, that will soon be available in GHC.
18 |
19 | (This is joint work with Simon Peyton Jones, Richard Eisenberg and Dimitrios Vytiniotis.)
20 |
--------------------------------------------------------------------------------
/app/templates/content/series.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
20 | $if(fieldEquals(type,"conference"))$
21 | This conference occurred on the following dates:
22 |
23 | $for(fieldAsList("dates"))$
24 |
$item$
25 | $endfor$
26 |
27 |
28 | $endif$
29 |
30 |
31 |
32 |
55 |
--------------------------------------------------------------------------------
/app/content/presentation/presentation-cryptography-and-verification-with-cryptol.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Cryptography and verification with Cryptol
3 | url-video: https://www.youtube.com/watch?v=sC2_5WaavFc
4 | url-slides: about:blank
5 | authors:
6 | - Austin Seipp
7 | source: http://www.composeconference.org/2016/speakers/
8 | conference: Compose2016
9 | tags:
10 | - Cryptography
11 | - DSL
12 | libraries:
13 | ---
14 |
15 | Cryptographic primitives exist all through-out the modern software stack, yet their construction and composition is often delicate and error prone. Furthermore, specifications are often far removed from real implementations, and written in high level prose or pseudo-code - while we tend to implement such software in low-level, bug-prone programming languages.
16 |
17 | Cryptol is a domain-specific language, inspired by Haskell, designed for the construction and verification of cryptographic software. Cryptol programs often serve as ‘executable specifications’ of some design, yielding easy to understand programs that serve as excellent references. Furthermore, through a novel use of SAT-based verification tools, Cryptol can allow you to verify real world software conforms to the specification in an easy, automated fashion.
18 |
19 | This talk will primarily focus on the relevant aspects of writing and using the Cryptol toolkit, including verification on real world cryptographic functions written in C and Java, along with some notes on its implementation.
20 |
--------------------------------------------------------------------------------
/app/content/presentation/presentation--applications-of-datatype-generic-programming-in-haskell.markdown:
--------------------------------------------------------------------------------
1 | ---
2 | title: Applications of Datatype Generic Programming in Haskell
3 | url-video: https://www.youtube.com/watch?v=ZtWzh4mBzaI
4 | url-slides: http://bobkonf.de/2016/slides/hahn.pdf
5 | authors:
6 | - Sönke Hahn
7 | source: http://bobkonf.de/2016/hahn.html
8 | conference: BOB2016
9 | tags:
10 | - Generic Programming
11 | - Algebraic Datatypes (ADTs)
12 | libraries:
13 | ---
14 |
15 | Datatype Generic Programming (DGP) allows to write code that operates on arbitrary Algebraic Datatypes (ADTs). The classic example is serialization and deserialization, but DGP opens up a wide field of applications. And while the support for generic serialization (and some other use-cases) through existing libraries is very stable and mature, other areas of applications of DGP still deserve further exploration. (E.g. database schema generation, database access, generic UIs to modify values, test data generation, etc.)
16 |
17 | Haskell's static type system, its ADTs and its type classes pose unique challenges not found in other mainstream languages, but also offer unique benefits. On top of that type-level programming (e.g. with type families) opens up even more possibilities.
18 |
19 | This talk gives an introduction to the principles of DGP in Haskell and discusses possible applications – both by looking at existing libraries and by providing an outlook on what could be done with DGP in the future.
20 |
--------------------------------------------------------------------------------
/app/js/stack-exchange-lookup.js:
--------------------------------------------------------------------------------
1 | function inspectURL(url) {
2 | var interesting = R.drop(2)(R.split('/')(url));
3 |
4 | console.log(interesting);
5 |
6 | var domain = R.head(R.split('.')(R.head(interesting)));
7 |
8 | console.log(domain);
9 |
10 | var questionId = R.head(R.drop(2)(interesting));
11 |
12 | return {
13 | id: questionId,
14 | domain: domain
15 | };
16 | }
17 |
18 | function constructURL(data) {
19 | return "https://api.stackexchange.com/2.2/questions/" + data.id + "?site=" + data.domain + "&filter=!9YdnSIoOi";
20 | }
21 |
22 | function messageIsValid( msg ) {
23 | return (
24 | typeof msg === 'object'
25 | && 'items' in msg
26 | && typeof msg.items === 'object'
27 | && msg.items.length > 0
28 | && typeof msg.items[0] === 'object'
29 | && 'body_markdown' in msg.items[0]
30 | );
31 | }
32 |
33 | function accessMessage( msg ) {
34 | return msg.items[0].body_markdown;
35 | }
36 |
37 | function renderMessage( contents ) {
38 | // Convert it to markdown.
39 | var converter = new showdown.Converter(),
40 | html = converter.makeHtml(contents);
41 |
42 | // Display it.
43 | jQuery('#post-preview > .contents').hide().html(html).fadeIn();
44 | }
45 |
46 | var stackExchangeLookup = new Lookup( inspectURL, constructURL, messageIsValid, accessMessage, undefined, renderMessage );
47 |
48 | function lookupStackExchangePost() {
49 | stackExchangeLookup.lookup();
50 | }
--------------------------------------------------------------------------------
/app/js/github-lookup.js:
--------------------------------------------------------------------------------
1 |
2 | function inspectURL(url) {
3 | var split = R.reverse( R.split('/')(url) );
4 |
5 | var data = {};
6 | data.user = R.head( R.drop(1)(split) );
7 | data.repo = R.head( split );
8 | return data;
9 | }
10 |
11 | function constructURL(data) {
12 | return "https://api.github.com/repos/" + data.user + "/" + data.repo;
13 | }
14 |
15 | function messageIsValid( msg ) {
16 | return (
17 | typeof msg === 'object'
18 | && 'description' in msg
19 | && 'html_url' in msg
20 | );
21 | }
22 |
23 | function accessMessage( msg ) {
24 | var contents = {};
25 | contents.description = msg.description;
26 | contents.url = msg.html_url;
27 | return contents;
28 | }
29 |
30 | function renderMessage( contents ) {
31 | // Convert it to markdown.
32 | var converter = new showdown.Converter(),
33 | html = converter.makeHtml(contents.description);
34 |
35 | // Display it.
36 | jQuery('#post-preview > .contents').hide().html(html).fadeIn();
37 | }
38 |
39 | /*
40 | function displayTags() {
41 | jQuery('.metadata').slideDown(300);
42 | jQuery('#confirm').prop('disabled','disabled');
43 | jQuery('#confirmed').fadeIn();
44 | loadDropdowns();
45 | jQuery('.row.url, .row.preview').slideUp(300);
46 | }
47 | */
48 |
49 | var githubLookup = new Lookup( inspectURL, constructURL, messageIsValid, accessMessage, undefined, renderMessage );
50 |
51 | function lookupGithubRepository() {
52 | githubLookup.lookup();
53 | }
--------------------------------------------------------------------------------
/app/content/article/lazy-io-and-graphs-winterfell-to-kings-landing.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Lazy I/O and graphs: Winterfell to King's Landing"
3 | date: 2017-01-17
4 | permission-file:
5 | url: "https://jaspervdj.be/posts/2017-01-17-lazy-io-graphs.html"
6 | authors:
7 | - Jasper Van der Jeugt
8 | type: "article"
9 | tags:
10 | - "Graphs"
11 | libraries:
12 | ---
13 |
14 | Introduction of the article:
15 |
16 | > This post is about Haskell, and lazy I/O in particular. It is a bit longer than usual, so I will start with a high-level overview of what you can expect:
17 | >
18 | > * We talk about how we can represent graphs in a “shallow embedding”. This means we will not use a dedicated Graph type and rather represent edges by directly referencing other Haskell values.
19 | >
20 | > * This is a fairly good match when we want to encode infinite 1 graphs. When dealing with infinite graphs, there is no need to “reify” the graph and enumerate all the nodes and egdes – this would be futile anyway.
21 | >
22 | > * We discuss a Haskell implementation of shortest path search in a weighted graph that works on these infinite graphs and that has good performance characteristics.
23 | >
24 | > * We show how we can implement lazy I/O to model infinite graphs as pure values in Haskell, in a way that only the “necessary” parts of the graph are loaded from a database. This is done using the unsafeInterleaveIO primitive.
25 | >
26 | > * Finally, we discuss the disadvantages of this approach as well, and we review some of common problems associated with lazy I/O.
27 |
--------------------------------------------------------------------------------
/app/content/presentation/quickfuzz-an-automatic-random-fuzzer-for-common-file-formats.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "QuickFuzz: An Automatic Random Fuzzer for Common File Formats"
3 | url-video: "https://www.youtube.com/watch?v=s7h4dhgaPCU"
4 | url-slides: "about:blank"
5 | authors:
6 | - Gustavo Grieco
7 | - Martín Ceresa
8 | - Pablo Buiras
9 | source: http://icfp16.sigplan.org/event/haskellsymp-2016-papers-quickfuzz-an-automatic-random-fuzzer-for-common-file-formats
10 | tags:
11 | - Fuzzing
12 | - Testing
13 | libraries:
14 | - template-haskell
15 | ---
16 |
17 |
18 | Fuzzing is a technique that involves testing programs using invalid
19 | or erroneous inputs. Most fuzzers require a set of valid inputs as a
20 | starting point, in which mutations are then introduced. QuickFuzz is a
21 | fuzzer that leverages QuickCheck-style random test-case generationto automatically test programs that manipulate common file formats
22 | by fuzzing. We rely on existing Haskell implementations of
23 | file-format-handling libraries found on Hackage, the
24 | community-driven Haskell code repository. We have tried QuickFuzz
25 | in the wild and found that the approach is effective in
26 | discovering vulnerabilities in real-world implementations of browsers,
27 | image processing utilities and file compressors among others.
28 | In addition, we introduce a mechanism to automatically derive random generators for the types
29 | representing these formats. QuickFuzz handles most well-known image
30 | and media formats, and can be used to test programs and libraries
31 | written in any language.
32 |
--------------------------------------------------------------------------------
/app/content/presentation/presentation--elm-im-produktiven-einsatz.markdown:
--------------------------------------------------------------------------------
1 | ---
2 | title: Elm im produktiven Einsatz
3 | url-video: https://www.youtube.com/watch?v=hG6Q8RZKg28
4 | url-slides: about:blank
5 | authors:
6 | - Gregor Große-Bölting
7 | source: http://bobkonf.de/2016/grosse-boelting.html
8 | conference: BOB2016
9 | tags:
10 | - Elm
11 | - Functional Reactive Programming (FRP)
12 | libraries:
13 | ---
14 |
15 | Die Adaption einer neuen Programmiersprache birgt viele Risiken: Wie ist die Akzeptanz im Team? Kann die Sprache alles, was man benötigt beziehungsweise gibt es eine ausreichende Unterstützung durch Bibliotheken? Rechtfertigt der zeitliche Aufwand den Nutzen, den die Verwendung der Sprache vermeintlich verspricht? Und nicht zuletzt: Gibt es einen echten Mehrwert für den Kunden?
16 |
17 | Elm ist eine funktionale, referentiell-transparente und stark typisierte Programmiersprache, die zu JavaScript transpiliert wird. Durch die Unterstützung von FRP (functional reactive programming) ermöglicht Elm die Gestaltung von sehr schnellen und für den Programmierer leicht nachzuvollziehenden Benutzeroberflächen.
18 |
19 | Dieser Vortrag zeigt, wie wir Elm zur Implementierung von Software im Business Intelligence-Umfeld verwenden. Dabei wird sowohl darauf eingegangen, welche Vorteile die Verwendung von Elm allen an der Softwareentwicklung Beteiligten bietet, als auch auf die Nachteile und Herausforderungen, die sich durch die Adaption einer noch recht jungen Programmiersprache ergeben. Die Vorzüge der Sprache werden direkt an Code-Beispielen illustriert, außerdem wird eine kurze Einführung in Elm gegeben.
20 |
--------------------------------------------------------------------------------