Skip to content

Instantly share code, notes, and snippets.

View haitlahcen's full-sized avatar

Hussein A. haitlahcen

View GitHub Profile
@haitlahcen
haitlahcen / puretypesystem.hs
Last active February 6, 2019 22:01
Pure Type System draft
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Applicative
import Data.Attoparsec.Text as A
@haitlahcen
haitlahcen / pattern.hs
Last active December 20, 2018 16:23
ViewPattern + PatternSynonyms
pattern (:-) :: Char -> T.Text -> T.Text
pattern x :- xs <- (T.uncons -> Just (x, xs))
where x :- xs = T.cons x xs
infixr 5 :-
-- No need for (Just (x, (Just (y, ys)), it automatically uncons + desugar
t :: T.Text -> T.Text
t (x :- y :- ys) = ys
t _ = ""
@haitlahcen
haitlahcen / idriskell.hs
Last active December 20, 2018 12:36
Idriskell
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE RankNTypes #-}
@haitlahcen
haitlahcen / dependent.hs
Created December 17, 2018 14:28
dependent types
data Vect :: Nat -> * -> * where
Cons :: KnownNat n => a -> Vect (n - 1) a -> Vect n a
Nil :: (KnownNat n, 0 <= n) => Vect n a
k :: Vect 1 Int
k = Cons 1 Nil
u :: Vect 0 Int
u = Nil
@haitlahcen
haitlahcen / hylo.hs
Created December 13, 2018 17:14
hylo
data State
= Init
| Header Int
Int
| Meta
data Tree a
= Node Int (V.Vector (Tree a))
| Leaf a
deriving (Show)
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeOperators #-}
import GHC.Generics
main :: IO ()
main = putStrLn "Hello"
@haitlahcen
haitlahcen / haxe-nodejs-awsebcli.nix
Created December 3, 2018 14:46
Haxe + NodeJS + Awsebcli
with import <nixpkgs> {};
let
haxe =
let
mkVersion = version: sha256:
stdenv.mkDerivation {
name = "haxe-${version}";
inherit version;
nativeBuildInputs = [ autoPatchelfHook ];
buildInputs = [ ocaml zlib pcre neko ocamlPackages.camlp4 ];
@haitlahcen
haitlahcen / default.nix
Last active November 28, 2018 14:17
Nixify CLI made by node, run `nix-build && nix-shell -p nodejs-10_x --run "./result"`
{ pkgs ? import <nixpkgs> {} }: with pkgs;
let
clever-tools-src =
stdenv.mkDerivation rec {
name = "clever-tools-${version}";
version = "1.2.2-beta.0";
phases = [ "installPhase" ];
src = builtins.fetchurl {
url = "https://github.com/CleverCloud/clever-tools/archive/${version}.tar.gz";
@haitlahcen
haitlahcen / default.nix
Created November 27, 2018 20:10
On the fly node package inside nix-shell
{ pkgs ? import <nixpkgs> {} }: with pkgs;
let
node2nix = nodePackages.node2nix;
emmet = stdenv.mkDerivation rec {
name = "emmet-cli-${version}";
version = "1.2.0";
phases = [ "installPhase" ];
src = builtins.fetchurl {
url = "https://github.com/Delapouite/emmet-cli/archive/v${version}.tar.gz";
@haitlahcen
haitlahcen / shell.nix
Last active January 21, 2019 15:36
On the fly postgresql database with postgis extension using Nix
with (import (builtins.fetchTarball {
name = "release-18.09";
url = https://github.com/nixos/nixpkgs/archive/6d4f3311d4b5662e2703cfd3278fd78bd972a56c.tar.gz;
sha256 = "0f3pmk9bf4g8r9kp4v7wksgw2ass9g2p1p2yl07r0nwlij0zpqr6";
}) {});
let
addPostgis = (pg:
buildEnv {
name = "postgresql-and-plugins-${(builtins.parseDrvName pg.name).version}";
paths = [ pg pg.lib (postgis.override { postgresql = pg; }) ];