Skip to content

Instantly share code, notes, and snippets.

@aslpavel
aslpavel / writeup.md
Created July 10, 2019 23:39 — forked from edmundsmith/writeup.md
Method for Emulating Higher-Kinded Types in Rust

Method for Emulating Higher-Kinded Types in Rust

Intro

I've been fiddling about with an idea lately, looking at how higher-kinded types can be represented in such a way that we can reason with them in Rust here and now, without having to wait a couple years for what would be a significant change to the language and compiler.

There have been multiple discussions on introducing higher-ranked polymorphism into Rust, using Haskell-style Higher-Kinded Types (HKTs) or Scala-looking Generalised Associated Types (GATs). The benefit of higher-ranked polymorphism is to allow higher-level, richer abstractions and pattern expression than just the rank-1 polymorphism we have today.

As an example, currently we can express this type:

@aslpavel
aslpavel / list.rs
Last active October 9, 2020 11:07 — forked from rust-play/playground.rs
List abstracted over Rc/Arc
// https://play.rust-lang.org/?gist=6f69dfefc6dd93d941cabb9a1634dcee
use std::fmt;
use std::iter::FromIterator;
use std::rc::Rc;
use std::sync::Arc;
use std::ops::Deref;
// pub trait HKT<U> where U: ?Sized {
// type C; // Current type
// type T; // Type with C swapped with U