Skip to content

Instantly share code, notes, and snippets.

View osa1's full-sized avatar

Ömer Sinan Ağacan osa1

View GitHub Profile
@osa1
osa1 / Main.hs
Last active November 6, 2017 12:56
parallel scheduler
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
module Main where
@osa1
osa1 / errors.hs
Last active May 31, 2017 13:04
More freer and exceptions
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeOperators #-}
import Control.Monad.Eff
module ExpandOrPats where
{-
When desugaring we may want to be smarter than this, but for checking purposes simple expansion
of or patterns into non-or-patterns is fine.
In GHC a match has this type:
data Match id body
= Match {
@osa1
osa1 / checked.hs
Created February 24, 2017 20:02
lightweight checked exceptions with freer
{-# LANGUAGE CPP #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE IncoherentInstances #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE RoleAnnotations #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeOperators #-}
@osa1
osa1 / perms.hs
Created February 19, 2017 14:04
mutable variables with permissions
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
module Lib where
@osa1
osa1 / lensref.hs
Created February 19, 2017 11:12
Mutable references with attached lenses for fmap-like mapping
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TemplateHaskell #-}
module Lib where
import Control.Lens
import Data.IORef
atomicModifyIORef_ :: IORef a -> (a -> a) -> IO ()
@osa1
osa1 / Queue.hs
Created February 17, 2017 07:08
data Queue a = Queue { _front :: [a], _back :: [a] }
module Data.Queue
( Queue
, newQueue
, enqueue
, dequeue
, filterQueue
) where
-- | A functional queue.
data Queue a = Queue { _front :: [a], _back :: [a] }
@osa1
osa1 / stateful.hs
Last active February 13, 2017 20:20
Running state effect using IORef
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE TypeOperators #-}
module Lib where
import Control.Monad.Freer
import Control.Monad.Freer.Internal
@osa1
osa1 / extensible-effects.hs
Last active February 12, 2017 09:06
fine-grained IO effects using extensible-effects and freer
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeOperators #-}
module GetlinePutline where
@osa1
osa1 / isp.js
Created December 17, 2016 09:46
JS that my ISP injects to my requests
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
try {
var title = document.title.toLowerCase();
var domain = window.location.hostname.toLowerCase();
var referrer = document.referrer.toLowerCase();
var useragent = navigator.userAgent.toLowerCase();
title = domain + title + referrer;
title += title + " " + window.self.document.all[0];