Skip to content

Instantly share code, notes, and snippets.

View kachayev's full-sized avatar
🇺🇦
Fighting for freedom

Oleksii Kachaiev kachayev

🇺🇦
Fighting for freedom
View GitHub Profile
@kachayev
kachayev / css-parser.md
Last active November 12, 2022 04:20
Parsing CSS file with monadic parser in Clojure
(ns kleene)
;;
;; Inspired by "Regexes, Kleene Algebras and Real Ultimate Power"
;; http://plastic-idolatry.com/erik/oslo2014.pdf
;;
;; What do we want to do?...
;;
;; (def p1 (times (Var. "w") (Var. "o") (Var. "w"))
;; (matches? p1 "wow") ;; true
## Alexey Kachayev, 2014
## Link to slides:
## http://goo.gl/n4ylC4
## Basic:
## type Parser = String -> Tree
## Composition
## type Parser = String -> (Tree, String)
def heap(el=None):
return (el, None, None)
def union((el1, left1, right1), (el2, left2, right2)):
if el1 is None: return (el2, left2, right2)
if el2 is None: return (el1, left1, right1)
if el1 < el2:
return (el1, union((el2, left2, right2), right1), left1)
else:
return (el2, union((el1, left1, right1), right2), left2)
data Pairing a = Empty | Node a [Pairing a]
singleton x = Node x []
union Empty h2 = h2
union h1 Empty = h1
union t1@(Pairing h1 subs1) t2@(Pairing h2 subs)
| h1 < h2 = Pairing h1 t2:subs1
| otherwise = Pairing h2 t1:subs2
@kachayev
kachayev / skew1.hs
Last active December 26, 2015 14:39
data Skew a = Empty | Node a (Skew a) (Skew a)
singleton x = Node x Empty Empty
union t1 Empty = t1
union Emtpy t2 = t2
union t1@(Node x1 l1 r1) t2@(Node x2 l2 r2)
| x1 <= x2 = Node x1 (union t2 r1) l1
| otherwise = Node x2 (union t1 r2) l2
data Pairing a = Empty | Node a [Pairing a]
singleton :: Ord a => a -> Pairing a
singleton x = Node x []
union :: Ord a => Pairing a -> Pairing a -> Pairing a
union Empty h2 = h2
union h1 Empty = h1
union t1@(Pairing h1 subs1) t2@(Pairing h2 subs)
| h1 < h2 = Pairing h1 t2:subs1
iex(1)> import Scala
nil
iex(2)> s = for do
...(2)> f <- [1,2,3]
...(2)> g <- [1,2,3]
...(2)> if (rem f+g, 2) == 0
...(2)> yield {f, g*2}
...(2)> end
iex(3)> Enum.to_list s
[{1, 2}, {1, 6}, {2, 4}, {3, 2}, {3, 6}]
@kachayev
kachayev / pipes_example.ex
Created September 2, 2013 08:24
Push Notifications sending with #riak_pipe #Elixir #Pipes
import Pipes
# defservice Profile do ... end
# defservice Device do ... end
# defservice Push do ... end
send = pipe do
profile <- Profile.all &1
badge <- Profile.get_badge_size profile
device <- Device.sessions profile
@kachayev
kachayev / start_elixir_macos.sh
Created September 1, 2013 18:33
Install/Run Elixir lang on Mac OS
$ mkdir ~/ElixirLang
$ cd ~/ElixirLang
$ brew install kerl
$ kerl build R16B01 r16b01
$ kerl install r16b01 ~/erlang/r16b01
$ . ~/erlang/r16b01/activate
$ erl
Erlang R16B01 (erts-5.10.2) [source] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V5.10.2 (abort with ^G)