Skip to content

Instantly share code, notes, and snippets.

View qnikst's full-sized avatar
🐧
penguin?

Alexander Vershilov qnikst

🐧
penguin?
View GitHub Profile
{-# LANGUAGE OverloadedStrings #-}
import Control.Applicative
import Data.Aeson
import Data.Monoid
import Data.Maybe
data Quto = Quto (Maybe Int) (Maybe String) deriving Show
-- Парсер поддерживающий отсуствие значений
instance FromJSON Quto where
-- |
-- Types and instances of anonymous records.
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TemplateHaskell, StandaloneDeriving, MultiParamTypeClasses, TypeFamilies, GeneralizedNewtypeDeriving #-}
import Control.Monad
import Control.Concurrent
import Control.Distributed.Process
import Control.Distributed.Process.Backend.SimpleLocalnet
import Control.Distributed.Process.Closure
import Control.Distributed.Process.Internal.Types (Process(..), LocalProcess)
import Control.Distributed.Process.Node (initRemoteTable)
import Control.Monad.Base (MonadBase(..))
@qnikst
qnikst / tsort.hs
Created July 2, 2015 09:07
typelevel sort
type Sort a = SortI a '[]
type family SortI a b where
SortI '[] b = b
SortI (a:?n ': as) '[] = SortI as '[ a :? n]
SortI (a:?n ': as) bs = SortI as (Insert (a:?n) bs)
type family Insert a b where
Insert (a :? n) '[] = '[ a :? n ]
Insert (a :? n) ( b :? m ': bs) = UnOrdering (CmpSymbol n m)
@qnikst
qnikst / gist:1859929
Created February 18, 2012 15:58
cut -f analog
import Data.Char (ord)
import Data.Conduit
import Data.Conduit.Binary (sourceHandle, sinkHandle)
import qualified Data.Conduit.Binary as CB
import qualified Data.Conduit.List as CL
import qualified Data.ByteString as S
import qualified Data.ByteString.Char8 as S8
import qualified Data.ByteString.Lazy as SL
import System.Environment (getArgs)
import System.IO
@qnikst
qnikst / gist:1924310
Created February 27, 2012 14:49
writer + binary
{-# LANGUAGE PackageImports #-}
import Data.Binary.Get
import "mtl" Control.Monad.Writer
import qualified Data.ByteString.Lazy as SL
import Data.Word
main = do
l <- SL.readFile "test"
let (a,b) = runWriter $ next l 0
print a
@qnikst
qnikst / gist:1941151
Created February 29, 2012 14:16
network-conduit vs monad transformer
{-# LANGUAGE PackageImports, TypeFamilies, FlexibleContexts #-}
-- code experiments with using monad stack with conduit
-- it works well except one case - using ResourceT in inner
-- monad (commented out function)
import Data.Conduit
import Data.Conduit.Network
import "mtl" Control.Monad.Reader
import "mtl" Control.Monad.Writer
@qnikst
qnikst / gist:2008113
Created March 9, 2012 19:03
tcp proxy
{-# OPTIONS -Wall #-}
import Data.Conduit
import Data.Conduit.Network
import Control.Monad.IO.Class (liftIO)
import Control.Monad.Trans.Resource
import Control.Concurrent.Lifted (fork)
import Control.Concurrent (killThread)
main::IO ()
main =
@qnikst
qnikst / gist:2030291
Created March 13, 2012 17:58
haskell flyod
{-# GHC_OPTIONS -O2 -Wall #-}
{-# LANGUAGE BangPatterns #-}
import System.IO
import Data.Word
import Data.Char (ord)
import Data.Array.Unboxed
import Data.Array.ST
import Data.ByteString.Lazy (ByteString)
@qnikst
qnikst / gist:2224307
Created March 28, 2012 06:38
interrupting process idea
import Control.Concurrent.STM
import Control.Concurrent.STM.TVar
import Control.Concurrent.STM.TChan
import Data.Map (Map)
import qualified Data.Map as Map
reglock = newTMVar
registry = newTVar empty
addProcess :: (a -> IO ()) -> TVar c -> b -> IO ()