feat(users/Profpatsch/netencode): Add initial Haskell parser

A simple categorical parser that does not implement Monad, and does
not contain an `m` and some rudementary error message handling.

In the future I’d probably want to wrap everything in an additional
`m`, so that subparsers can somehow use `Selective` to throw errors
from within `m` that contain the parsing context if at all possible.
Hard to do without Monad, I have to say. Not even stuff like `StateT`
works without the inner `m` implementing `Monad`.

Change-Id: I1366eda606ddfb019637b09c82d8b0e30bd4e318
Reviewed-on: https://cl.tvl.fyi/c/depot/+/7797
Tested-by: BuildkiteCI
Reviewed-by: Profpatsch <mail@profpatsch.de>
This commit is contained in:
Profpatsch 2023-01-08 23:41:17 +01:00
parent 8cdefc5b25
commit cd40585ea4
7 changed files with 169 additions and 45 deletions

View file

@ -1,4 +1,3 @@
{-# LANGUAGE GHC2021 #-}
{-# LANGUAGE ImplicitParams #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MagicHash #-}
@ -52,10 +51,10 @@ module MyPrelude
when,
unless,
guard,
ExceptT,
ExceptT (..),
runExceptT,
MonadError,
throwError,
MonadThrow,
throwM,
MonadIO,
liftIO,
MonadReader,
@ -79,6 +78,8 @@ module MyPrelude
traverseFold,
traverseFold1,
traverseFoldDefault,
MonadTrans,
lift,
-- * Data types
Coercible,
@ -145,15 +146,15 @@ where
import Control.Applicative ((<|>))
import Control.Category (Category, (>>>))
import Control.Monad (guard, join, unless, when)
import Control.Monad.Catch (MonadThrow (throwM))
import Control.Monad.Except
( ExceptT,
MonadError,
( ExceptT (..),
runExceptT,
throwError,
)
import Control.Monad.IO.Class (MonadIO, liftIO)
import Control.Monad.Identity (Identity (Identity))
import Control.Monad.Reader (MonadReader, asks)
import Control.Monad.Trans (MonadTrans (lift))
import Data.Bifunctor (Bifunctor, bimap, first, second)
import Data.ByteString
( ByteString,

View file

@ -30,6 +30,7 @@ library
, profunctors
, containers
, error
, exceptions
, bytestring
, mtl
, hspec
@ -38,4 +39,4 @@ library
, nicify-lib
, ansi-terminal
, vector
default-language: Haskell2010
default-language: GHC2021