Skip to content

Instantly share code, notes, and snippets.

View kleczkowski's full-sized avatar

Konrad Kleczkowski kleczkowski

  • Standard Chartered Bank
  • Warsaw, Poland
  • 22:45 (UTC +02:00)
View GitHub Profile

Obiekty w Haskellu?

Napisałem ten krótki referat, trochę w formie żartu, w jaki sposób możemy uzyskać obiekty w Haskellu. Haskell jest znany z tego, że daje łatwo wyrazić pewne problemy przez konstrukcje językowe, które są dla niego unikalne, a później często stają się inspiracją dla innych języków. Teraz inspiracją dla Haskella są obiekty.

Ale najpierw dynamic dispatch

Rozważmy sobie klasę typów IsTelegraph pozwalającą na wysyłanie i odbieranie pewnych danych

@kleczkowski
kleczkowski / Tardis.md
Last active November 9, 2019 10:57
O monadzie RState i Tardis

O monadzie RState i Tardis

W tej notatce chciałbym wspomnieć o dość ciekawym tworze, jaką jest monada Tardis. Każdy, kto oglądał dra Who, najpewniej wie, czym Tardis był. Za jaki efekt uboczny odpowiada monada Tardis w Haskellu?

Krótka historia

Wyobraźmy sobie sytuację, w której musimy zaimplementować poniższe zadanie:

Dana jest niepusta lista. Napisać funkcję, która podmienia każdy element listy na element maksymalny listy.

@kleczkowski
kleczkowski / FrequencyTableSpec.hs
Last active October 30, 2019 21:04
Example generic tests in Haskell (hspec and QuickCheck)
module Compression.AC.FrequencyTableSpec
( spec
)
where
import Compression.AC.FrequencyTable ( FrequencyTable )
import qualified Compression.AC.FrequencyTable as FT
import Data.Map ( Map
, (!)
)
@kleczkowski
kleczkowski / church.md
Last active August 24, 2023 09:41
Kodowanie Churcha

Kodowanie Churcha

Dziś chcę opowiedzieć o kodowaniu Churcha, które jest za równo piękną konstrukcją w teorii obliczeń, jak i w praktyce.

Wymagana wiedza:

  • podstawy rachunku lambda;
  • podstawy Haskella (struktury danych, klasy typów; byłoby świetnie, gdybyś znał: dyrektywy RankNTypes, INLINE, SPECIALIZE, stream fusing).

Czym jest kodowanie Churcha?

@kleczkowski
kleczkowski / transformatory.md
Last active November 9, 2019 10:57
Krótko o transformatorach monad

Krótko o transformatorach monad

Dziś chciałbym opowiedzieć nieco o transformatorach monad, które dla osób, które poznały dopiero Haskella i jego podstawowe mechanizmy jak funktory, funktory aplikatywne i monady, są mało intuicyjne a ich mechanizm działania jest dość tajemniczy. Chciałbym wspomnieć o tym:

  • czym jest transformator monad;
  • jak definiować własne transformatory monad;
  • jak implementować własne transformatory monad.

Wstęp

@kleczkowski
kleczkowski / funktory.md
Last active August 25, 2019 23:07
Funktory (aplikatywne)

Funktory (aplikatywne)

Ten artykuł chciałbym poświęcić jednej, dość zapomnianej rzeczy, jaką jest funktor aplikatywny. Mamy pełno artykułów o monadach i ich zastosowaniach, lecz nieczęsto się zdarza czytać o funktorach aplikatywnych i w ogóle --- funktorach.

Stwierdziłem, że funktory aplikatywne mają naprawdę potencjał w realnych zastosowaniach, tylko mało kto sobie zdaje sprawę, że funktor aplikatywny jest w zasadzie funkcyjną wersją, wysokopoziomową, pewnego kreacjonalnego wzorca projektowego.

Zakładam, że wiesz, co to są klasy typów i algebraiczne struktury danych, jak je się definiuje. Generalnie wymagana jest wiedza z Haskella na poziomie pisania w REPLu.

Czym jest funktor?

-- |
-- Module : HsEmu.Core.Machine
-- Copyright : Konrad Kleczkowski 2019
-- License : BSD3
--
-- Maintainer : konrad.kleczkowski@gmail.com
-- Stability : experimental
-- Portability : unknown
--
-- Provides the monadic stack to preform computations
grammar SimpleImperativeLanguage;
@lexer::header {
package com.github.repaj.glang;
}
@parser::header {
package com.github.repaj.glang;
import java.lang.*;
@kleczkowski
kleczkowski / multi-module-pom.xml
Created February 1, 2018 14:10
Example POM for multi-module Maven projects in Java 9
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.repaj.my-project</groupId>
<artifactId>my-project</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
/*
* MIT License
*
* Copyright (c) 2017 Konrad Kleczkowski
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is