    module Network.HPACK.Builder where

    newtype Builder a = Builder ([a] -> [a])

    (<<) :: Builder a -> a -> Builder a
    Builder [a] -> [a]
    b << :: forall a. Builder a -> a -> Builder a
    << a
    entry = ([a] -> [a]) -> Builder a
    forall a. ([a] -> [a]) -> Builder a
    Builder (([a] -> [a]) -> Builder a) -> ([a] -> [a]) -> Builder a
    forall a b. (a -> b) -> a -> b
    $ [a] -> [a]
    b ([a] -> [a]) -> ([a] -> [a]) -> [a] -> [a]
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . (a
    entry a -> [a] -> [a]
    forall a. a -> [a] -> [a]
    :)

    empty :: Builder a
    empty :: forall a. Builder a
    empty = ([a] -> [a]) -> Builder a
    forall a. ([a] -> [a]) -> Builder a
    Builder [a] -> [a]
    forall a. a -> a
    id

    singleton :: a -> Builder a
    singleton :: forall a. a -> Builder a
    singleton a
    x = ([a] -> [a]) -> Builder a
    forall a. ([a] -> [a]) -> Builder a
    Builder (a
    x a -> [a] -> [a]
    forall a. a -> [a] -> [a]
    :)

    run :: Builder a -> [a]
    run :: forall a. Builder a -> [a]
    run (Builder [a] -> [a]
    b) = [a] -> [a]
    b []