From 4ccf1996a5bd739dfb1e62fb3bfb189c04fb6d89 Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Fri, 7 Nov 2025 21:39:09 +0100 Subject: Rewrite CPSy code as do-code using QualifiedDo Credits for this trick go to Leary on IRC: https://ircbrowse.tomsmeding.com/browse/lchaskell?id=1691743#trid1691743 Advantage: all the binders are on the left-hand side. Disadvantages: - all continuations need to pass exactly one value, i.e. tuples are required - wacky shit --- src/ContDo.hs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/ContDo.hs (limited to 'src/ContDo.hs') diff --git a/src/ContDo.hs b/src/ContDo.hs new file mode 100644 index 0000000..255e21a --- /dev/null +++ b/src/ContDo.hs @@ -0,0 +1,15 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE MonoLocalBinds #-} +module ContDo where + +import GHC.TypeLits + +(>>=) :: (a -> b) -> a -> b +(>>=) = ($) + +class AlwaysFail a +instance TypeError (Text "fail") => AlwaysFail a + +fail :: AlwaysFail a => String -> a +fail = error -- cgit v1.2.3-70-g09d2