Skip to content

Instantly share code, notes, and snippets.

View legokichi's full-sized avatar
😇
neary heaven

Legokichi Duckscallion legokichi

😇
neary heaven
View GitHub Profile

Rust/Haskell: Higher-Kinded Types (HKT)

A higher kinded type is a concept that reifies a type constructor as an actual type.

A type constructor can be thought of in these analogies:

  • like a function in the type universe
  • as a type with a "hole" in it

Rust/Haskell: Higher-Kinded Types (HKT)

A higher kinded type is a concept that reifies a type constructor as an actual type.

A type constructor can be thought of in these analogies:

  • like a function in the type universe
  • as a type with a "hole" in it
@legokichi
legokichi / rust-patterns.md
Created January 10, 2020 20:11 — forked from qnighy/rust-patterns.md
Rustのパターンっぽいやつメモ

パターンとはその言語が抽象化できなかった敗北の歴史である。 しかしどんなに優れた言語であってもあらゆる繰り返しに勝てるわけではない。 人は必ずメタ繰り返しを欲するからだ。 そしてそれはRustも例外ではない。

ここでは、OOPでも知られているパターンよりも、Rustに特有のパターンを思いつく限りまとめてみた。名前は適当。

  • crate splitting
    • でかいcrateを分割して、見通しを良くする・再コンパイルの分量を削減する・並列コンパイルを可能にする
  • 親玉crate(全てにdependする)と殿crate(全てにdependされる)があることが多いので、だいたい束みたいな形になる。
@legokichi
legokichi / mqtt.rst
Created November 20, 2019 05:39 — forked from voluntas/mqtt.rst
MQTT とはなんだったのか

MQTT とはなんだったのか

更新:2017-05-09
作者:@voluntas
バージョン:3.14
URL:http://voluntas.github.io/

MQTT をググって調べた人向け

@legokichi
legokichi / async_await_cancellation.md
Created October 28, 2019 07:43 — forked from Matthias247/async_await_cancellation.md
Async/Await - The challenges besides syntax - Cancellation

Async/Await - The challenges besides syntax - Cancellation

This is the second article in a series of articles around Rusts new async/await feature. The first article about interfaces can be found here.

In this part of the series we want to a look at a mechanism which behaves very different in Rust than in all other languages which feature async/await support. This mechanism is Cancellation.

@legokichi
legokichi / 0_raft.md
Created October 17, 2019 03:34 — forked from sile/0_raft.md
Raft(分散合意アルゴリズム)について
@legokichi
legokichi / Algebra.purs
Created September 22, 2019 13:01 — forked from LukaJCB/Algebra.purs
Alternative Tagless Final encoding in PureScript
module Algebra where
import Prelude
import Control.Monad.Eff (Eff)
import Data.Maybe (Maybe(..))
newtype ConsoleAlg f = ConsoleAlg
{ printLn :: String -> f Unit
, readLn :: f String
@legokichi
legokichi / Algebra.purs
Created September 22, 2019 13:01 — forked from LukaJCB/Algebra.purs
Alternative Tagless Final encoding in PureScript
module Algebra where
import Prelude
import Control.Monad.Eff (Eff)
import Data.Maybe (Maybe(..))
newtype ConsoleAlg f = ConsoleAlg
{ printLn :: String -> f Unit
, readLn :: f String
@legokichi
legokichi / aws-iot-data-sigv4.ts
Created September 21, 2019 06:09
「aws iot data の sigv4 計算は 通常の sigv4 計算と違う」スニペット
import AWS = require("aws-sdk");
const { iso8601 } = (AWS as any).util.date;
const { hmac, sha256 } = (AWS as any).util.crypto;
function getSignatureKey(
key: string,
date: string,
region: string,
service: string