Skip to content

Instantly share code, notes, and snippets.

@andrevdm
andrevdm / Scotty_websockets.hs
Last active March 6, 2024 01:51
Using websockets with scotty haskell
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Protolude
import qualified Web.Scotty as Sc
import qualified Data.Text as Txt
import qualified Network.Wai.Middleware.Gzip as Sc
@andrevdm
andrevdm / .tmux.conf
Last active December 11, 2023 12:05
tmux floating terminal per pane
#Per pane floating window
#Toggle with ` (grave) key
bind ` if-shell "echo '#{session_name}' | grep -q 'fterm-'" {
detach-client
} {
run-shell "tmux popup -E 'tmux attach -t fterm-#{session_name}-#{pane_id} || tmux new -s fterm-#{session_name}-#{pane_id}'"
}
@andrevdm
andrevdm / Lib.hs
Created September 8, 2018 08:44
Haskell MTL and classy lenses example (ReaderT, ExceptT)
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Lib where
import Protolude
import Control.Lens.TH (makeClassy, makeClassyPrisms)
@andrevdm
andrevdm / amazonka_eg.hs
Created September 23, 2017 13:10
Amazonka: example dynamo & s3
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Protolude hiding (to, (&))
import qualified System.IO as IO
import Control.Lens ((<&>), (^.), (.~), (&), set, view)
import qualified Data.Text as Txt
import qualified Data.Conduit as C
@andrevdm
andrevdm / Rabbit.hs
Last active May 25, 2022 18:09
Haskell RabbitMQ wrapper. Should handle channel and connection failures. Includes e.g. RPC with timeouts
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE NumericUnderscores #-}
{-# LANGUAGE RankNTypes #-}
module Rabbit
( defaultOpts
, mkConnection
, runTopicConsumer
@andrevdm
andrevdm / reverseProxy.hs
Last active May 7, 2022 12:28
Haskell reverse proxy using Network.HTTP.ReverseProxy
import Protolude
import qualified Network.HTTP.ReverseProxy as Rp
import qualified Network.Wai as W
import qualified Network.Wai.Handler.Warp as Wrp
import qualified Network.HTTP.Client as HC
testProxy :: IO ()
testProxy =
Wrp.run 3000 =<< revProxyApp
@andrevdm
andrevdm / reqMultiPartUpload.hs
Created August 20, 2021 16:28
Haskell req multi-part upload, observed
import Control.Exception.Safe (throwString)
import qualified Data.ByteString.Lazy as BSL
import qualified Data.Text as Txt
import qualified Data.Text.Encoding as TxtE
import qualified Network.HTTP.Client as HC
import qualified Network.HTTP.Client.MultipartFormData as MFD
import Network.HTTP.Req ((/:))
import qualified Network.HTTP.Req as R
import qualified System.FilePath as Fp
import qualified Text.URI as URI
@andrevdm
andrevdm / haskellChunkDownload.hs
Last active August 2, 2021 10:03
Haskell chunked/streamed file downloads with progress notifications
import Data.Conduit ((.|))
import qualified Data.Conduit as C
import qualified Data.Conduit.Combinators as C
import Network.HTTP.Req ((/:))
import qualified Network.HTTP.Req as R
import qualified Network.HTTP.Req.Conduit as R
downloadChunkedUrl
:: FilePath
-> (ByteString -> IO ())
@andrevdm
andrevdm / registry04.hs
Created March 13, 2021 10:37
Registry with partially applied component and DOT (graphviz) display
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
-- {-# LANGUAGE ExplicitForAll #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE FlexibleContexts #-}
module Lib
( run
) where
@andrevdm
andrevdm / registry03.hs
Created March 12, 2021 14:52
Registry with parameterised monad
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
-- {-# LANGUAGE ExplicitForAll #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE FlexibleContexts #-}
module Lib
( run
) where