Where functional programmers share their craft.
Type Theory & Compiler Design
Building next-generation type inference for GHC. Author of typed-process-ng and contributor to the Haskell Language Server.
Distributed Systems & Concurrency
Pioneering Software Transactional Memory patterns for real-time distributed ledgers. Maintains stm-containers fork with CRDT support.
Property-Based Testing
Creator of QuickCheck-style testing frameworks for industrial Haskell. Speaker at ZuriHac and Haskell Symposium.
Web Frameworks & Servant
Core maintainer of Servant ecosystem. Building type-safe API generation tools used by fintech companies worldwide.
An easy to use, fast extensible effects library with seamless integration with the existing Haskell ecosystem. Provides a modern alternative to mtl-style transformers.
import Effectful
import Effectful.Dispatch.Dynamic
data FileSystem :: Effect where
ReadFile :: FilePath -> FileSystem m String
WriteFile :: FilePath -> String -> FileSystem m ()
type instance DispatchOf FileSystem = Dynamic
runFileSystem :: IOE :> es
=> Eff (FileSystem : es) a -> Eff es a
runFileSystem = interpret $ \_ -> \case
ReadFile path -> liftIO $ readFile path
WriteFile path cont -> liftIO $ writeFile path cont
A family of Haskell libraries for writing type-safe web APIs. Servant lets you declare your API at the type level and automatically derive servers, clients, and documentation.
type UserAPI =
"users" :> Get '[JSON] [User]
:<|> "users" :> Capture "userid" Int
:> Get '[JSON] User
:<|> "users" :> ReqBody '[JSON] User
:> Post '[JSON] User
server :: Server UserAPI
server = getUsers :<|> getUserById :<|> createUser
where
getUsers = liftIO fetchAllUsers
getUserById = liftIO . fetchUser
createUser = liftIO . insertUser
The universal document converter. Written in Haskell, Pandoc converts between dozens of markup formats, powering academic publishing, documentation pipelines, and static site generators worldwide.
import Text.Pandoc
import Text.Pandoc.Builder
main :: IO ()
main = do
result <- runIO $ do
doc <- readMarkdown def "# Hello\n\nWorld!"
writeHtml5String def doc
case result of
Left err -> print err
Right html -> putStrLn html
-- Custom filter: capitalize all headers
capHeaders :: Pandoc -> Pandoc
capHeaders = walk capitalizeHeader
where
capitalizeHeader (Header n a inlines) =
Header n a (walk toUpper inlines)
capitalizeHeader x = x
Zurich, Switzerland
Keynote: Simon Peyton Jones
HackathonMilan, Italy
Paper presentations & workshops
AcademicMunich, Germany
Community sprints & talks
HackathonLondon, UK
Industry Haskell talks
ConferenceSeoul, South Korea
Monthly functional programming gathering
MeetupOnline
25 days of Haskell challenges
Online