HORIZON HASKELLDocslts/ghc-9.10.x248f8f02026-10-05Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · 248f8f0 · 2026-10-05

Modulehxt-9.3.1.22Haskell2010

Control.Arrow.ArrowIf

Conditionals for List Arrows

This module defines conditional combinators for list arrows.

The empty list as result represents False, none empty lists True.

  • 1 type
  • 1 class
  • Packagehxt-9.3.1.22
  • Exports2
  • LanguageHaskell2010
  • LicenceMIT
  • SourceArrowIf.hs
classclass ArrowList a => ArrowIf (a :: Type -> Type -> Type) where
#

The interface for arrows as conditionals.

Requires list arrows because False is represented as empty list, True as none empty lists.

Only ifA and orElse don't have default implementations

Methods

  • ifA :: a b c -> a b d -> a b d -> a b d

    if lifted to arrows

  • ifP :: (b -> Bool) -> a b d -> a b d -> a b d

    shortcut: ifP p = ifA (isA p)

  • neg :: a b c -> a b b

    negation: neg f = ifA f none this

  • when :: a b b -> a b c -> a b b

    f `when` g : when the predicate g holds, f is applied, else the identity filter this

  • whenP :: a b b -> (b -> Bool) -> a b b

    shortcut: f `whenP` p = f `when` (isA p)

  • whenNot :: a b b -> a b c -> a b b

    f `whenNot` g : when the predicate g does not hold, f is applied, else the identity filter this

  • whenNotP :: a b b -> (b -> Bool) -> a b b

    like whenP

  • guards :: a b c -> a b d -> a b d

    g `guards` f : when the predicate g holds, f is applied, else none

  • guardsP :: (b -> Bool) -> a b d -> a b d

    like whenP

  • filterA :: a b c -> a b b

    shortcut for f guards this

  • containing :: a b c -> a c d -> a b c

    f `containing` g : keep only those results from f for which g holds

    definition: f `containing` g = f >>> g `guards` this

  • notContaining :: a b c -> a c d -> a b c

    f `notContaining` g : keep only those results from f for which g does not hold

    definition: f `notContaining` g = f >>> ifA g none this

  • orElse :: a b c -> a b c -> a b c

    f `orElse` g : directional choice: if f succeeds, the result of f is the result, else g is applied

  • choiceA :: [IfThen (a b c) (a b d)] -> a b d

    generalisation of orElse for multi way branches like in case expressions.

    An auxiliary data type IfThen with an infix constructor :-> is used for writing multi way branches

    example: choiceA [ p1 :-> e1, p2 :-> e2, this :-> default ]

  • tagA :: a b c -> a b (Either b b)

    tag a value with Left or Right, if arrow has success, input is tagged with Left, else with Right

  • spanA :: a b b -> a [b] ([b], [b])

    split a list value with an arrow and returns a pair of lists. This is the arrow version of span. The arrow is deterministic.

    example: runLA (spanA (isA (/= '-'))) "abc-def" gives [("abc","-def")] as result

  • partitionA :: a b b -> a [b] ([b], [b])

    partition a list of values into a pair of lists

    This is the arrow Version of partition

Instances4ArrowIf
  • ArrowIf IOLADefined in hxt-9.3.1.22 · Control.Arrow.IOListArrow
  • ArrowIf LADefined in hxt-9.3.1.22 · Control.Arrow.ListArrow
  • ArrowIf (IOSLA s)Defined in hxt-9.3.1.22 · Control.Arrow.IOStateListArrow
  • ArrowIf (SLA s)Defined in hxt-9.3.1.22 · Control.Arrow.StateListArrow