Skip to content

Instantly share code, notes, and snippets.

@SergeyStretovich
SergeyStretovich / parsing_ini.hs
Created September 6, 2022 05:05
ini files parsing with Parsec library in Haskell
{-# LANGUAGE ScopedTypeVariables #-}
module Main where
import Text.Parsec
import Text.Parsec.Expr
import qualified Text.Parsec.Token as TT
import qualified Text.Parsec.Language as Lang
import Data.Char
import System.IO
@SergeyStretovich
SergeyStretovich / fsharp_webclient_run_async_parallelism.fs
Created November 29, 2021 19:09
An example of parallelism in F#.
open System
open System.IO
open System.Net
open System.Web
open System.Collections.Generic
open System.Text.RegularExpressions
let urls =["https://en.wikipedia.org/wiki/Toomas_Altnurme"; "https://en.wikipedia.org/wiki/J%C3%BCri_Arrak"; "https://en.wikipedia.org/wiki/Alisa_Jakobi";
"https://en.wikipedia.org/wiki/Kalli_Kalde"; "https://en.wikipedia.org/wiki/Liis_Koger"; "https://en.wikipedia.org/wiki/Mari_Kurismaa";
@SergeyStretovich
SergeyStretovich / fsharp_run_tasks_parallelism.fs
Last active November 29, 2021 17:02
A very brief example of parallelism in F#.
open System
open System.IO
open System.Drawing
let ResizeImage(img:Image):Image=
let siz = new Size(60,60)
let bmp:Bitmap= new Bitmap(img,siz)
let img:Image = bmp :> Image
img
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE OverloadedStrings #-}
import Data.String
import Graphics.UI.Gtk
import Graphics.UI.Gtk.Gdk.GC
import qualified Data.Tree as Tree
import qualified Data.Text as T
@SergeyStretovich
SergeyStretovich / Haskell_gtk2hs_filtering_treeview.hs
Created July 31, 2020 17:13
Playing with Gtk in Haskell (gtk2hs), making my TreeView widget filterable
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
import Data.IORef
import Graphics.UI.Gtk
import Graphics.UI.Gtk.ModelView
import qualified Data.Text as T
import Graphics.UI.Gtk.Gdk.Events as Ev
import Data.Maybe
import System.IO.Unsafe
@SergeyStretovich
SergeyStretovich / MultiparamTypeClasses example.hs
Last active July 26, 2020 08:34
Toying with haskell MultiParamTypeClasses
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE AllowAmbiguousTypes #-}
data TestItem b n = TestItem {itemName::b, itemValue::n}
class (Num n,IsString b) => PieChartItem a b n where
getValue :: a -> n
getName :: a -> b
@SergeyStretovich
SergeyStretovich / Merge_effect_interpreters_freer_monad.hs
Created July 10, 2020 08:38
Freer monad - merge effect interpreters using freer-simple
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE Rank2Types #-}
@SergeyStretovich
SergeyStretovich / From_zero_to_cooperative_threads_in_33_lines_of_Haskell_code.hs
Last active July 9, 2020 08:17
Usage example of Free monad - compilable and working code for an Gabriel Gonzalez's article "From zero to cooperative threads in 33 lines of Haskell code"
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveAnyClass #-}
import Data.Sequence
import Control.Monad
import Control.Monad.IO.Class
import Control.Applicative
import Control.Monad.Trans.Free
data ThreadF next = Fork next next
@SergeyStretovich
SergeyStretovich / Freer monad file reading exception.hs
Last active July 10, 2020 08:57
Exception handling example Freer monad (with freer-simple)
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Main where
@SergeyStretovich
SergeyStretovich / Tictactoe_Free_monad.hs
Last active July 6, 2020 21:29
Free monad in Haskell, toying with Tic-Tac-Toe
{-# LANGUAGE DeriveFunctor #-}
import System.Random
import Data.List
import Data.String
import System.Console.ANSI
import Control.Monad.Free
import Prelude
initState = ["0", "1", "2", "3", "4", "5", "6", "7", "8" ]