Here's an ADT which is not a GADT, in Haskell:
data Expr = IntExpr Int | BoolExpr Bool| {-# LANGUAGE Rank2Types #-} | |
| {-# LANGUAGE FlexibleContexts #-} | |
| module Mtl where | |
| import Control.Monad.State | |
| import Control.Monad.Except | |
| runMtl | |
| :: Bool |
| //////////////////////////////////////////////////////////////////////// | |
| // Intro | |
| /////////////////////// | |
| // Tools like Redux-saga, React-redux and Reselect can easily be used without Redux | |
| // For Reselet there's nothing to do, it's just not coupled to Redux | |
| // For the others, you just need to provide an adapter | |
| // At Stample.co we use a legacy framework that is quite close to Redux but with a bad API | |
| // We want to progressively migrate to Redux, so starting now to use Redux tools on new features will make our migration faster |
| {-# LANGUAGE BangPatterns #-} | |
| {- | |
| Scenario / preconditions for the usefulness of this ring buffer: | |
| - mutable data structure | |
| - elements of the same size (here: ByteString, extending to values of class Storable should be trivial) | |
| - each element is denoted by a continuous Int id | |
| - main benefit, esp. for a large number of elements: |
| /** | |
| * Solves the n-Queen puzzle in O(n!) | |
| * Let p[r] be the column of the queen on the rth row (must be exactly 1 queen per row) | |
| * There also must be exactly 1 queen per column and hence p must be a permuation of (0 until n) | |
| * There must be n distinct (col + diag) and n distinct (col - diag) for each queen (else bishop attacks) | |
| * @return returns a Iterator of solutions | |
| * Each solution is an array p of length n such that p[i] is the column of the queen on the ith row | |
| */ | |
| def nQueens(n: Int): Iterator[Seq[Int]] = | |
| (0 until n) |
Once in a while, you may need to cleanup resources (containers, volumes, images, networks) ...
// see: https://github.com/chadoe/docker-cleanup-volumes
$ docker volume rm $(docker volume ls -qf dangling=true)
$ docker volume ls -qf dangling=true | xargs -r docker volume rm
| const daggy = require('daggy') | |
| const Task = require('data.task') | |
| const _ = require('lodash') | |
| const kleisli_comp = (f, g) => x => f(x).chain(g) | |
| const compose = (f, g) => x => f(g(x)) | |
| const id = x => x | |
| //=============FREE============= | |
| const Free = daggy.taggedSum({Impure: ['x', 'f'], Pure: ['x']}) | |
| const {Impure, Pure} = Free |