Skip to content

Instantly share code, notes, and snippets.

@andrevdm
andrevdm / App.hs
Created April 20, 2025 16:11
Haskell ollama demo showing very janky RAG with pgVector and ollama embedding
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE QuasiQuotes #-}
module App where
import Verset
import Control.Exception.Safe (throwString, bracket)
@andrevdm
andrevdm / ollamaRepl.hs
Created April 19, 2025 15:26
Haskell ollama example REPL with basic tools support
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE QuasiQuotes #-}
module App where
import Verset
import qualified Data.Aeson as Ae
@andrevdm
andrevdm / ollamaTool2.hs
Last active April 19, 2025 14:00
Haskell ollama call showing how to respond to a tool usage and parsing
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE QuasiQuotes #-}
module App where
import Verset
import qualified Data.Aeson as Ae
@andrevdm
andrevdm / ollamaTool1.hs
Last active April 19, 2025 12:57
Haskell ollama call showing how to respond to a tool usage
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE QuasiQuotes #-}
module App where
import Verset
import qualified Data.Aeson as Ae
@andrevdm
andrevdm / bot.fs
Created May 11, 2024 11:41
F# discord bot
open System.Threading.Tasks
open DSharpPlus
let discord =
new DiscordClient(
new DiscordConfiguration(
Token = "xxxx", //Token goes here
TokenType = TokenType.Bot,
Intents = DiscordIntents.AllUnprivileged
@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 / 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 ())