Hoogle Search

Within LTS Haskell 24.46 (ghc-9.10.3)

Note that Stackage only displays results for the latest LTS and Nightly snapshot. Learn more.

  1. catmap :: FunctorOf cat t => cat a b -> cat (t a) (t b)

    generic-functor Generic.Functor.Internal.Implicit

    No documentation available.

  2. multimapI :: MultimapI arr x y => arr -> x -> y

    generic-functor Generic.Functor.Internal.Implicit

    Core of multimap

  3. multimapOf :: MultimapOf cat arr x y => arr -> cat x y

    generic-functor Generic.Functor.Internal.Implicit

    No documentation available.

  4. multimap_ :: Multimap_ cat arr x y => arr -> cat x y

    generic-functor Generic.Functor.Internal.Implicit

    No documentation available.

  5. module Generic.Functor.Multimap

    Generalized functors, where the type parameter(s) may be nested in arbitrary compositions of functors. Note that these functions are unsafe because they rely on incoherent instances. See the Usage section of gsolomap for details.

    Example

    {-# LANGUAGE DeriveGeneric #-}
    module Main where
    
    import Generic.Functor
    import GHC.Generics (Generic)
    
    data T a b = C Int a b
    deriving (Show, Generic)
    
    fmapT :: (b -> b') -> T a b -> T a b'
    fmapT = gsolomap
    
    firstT :: (a -> a') -> T a b -> T a' b
    firstT = gsolomap
    
    bothT :: (a -> a') -> T a a -> T a' a'
    bothT = gsolomap
    
    watT ::
    (a -> a') ->
    T (a , a ) ((a  -> a') -> Maybe a ) ->
    T (a', a') ((a' -> a ) -> Maybe a')
    watT = gsolomap
    
    -- Incoherence test
    main :: IO ()
    main = do
    print (fmapT    ((+1) :: Int -> Int) (C 0 0 0 :: T Int Int))
    print (gsolomap ((+1) :: Int -> Int) (C 0 0 0 :: T Int Int) :: T Int Int)
    -- NB: Type annotations are needed on both the input and output T Int Int.
    putStrLn "We are not the same."
    
    -- Output:
    --     C 0 0 1
    --     C 1 1 1
    --     We are not the same.
    

  6. class GMap1 Default Incoherent arr Rep x Rep y => GMultimap arr x y

    generic-functor Generic.Functor.Multimap

    Constraint for gmultimap.

  7. class MultimapI Default Incoherent arr x y => Multimap arr x y

    generic-functor Generic.Functor.Multimap

    Constraint for multimap.

  8. gmultimap :: forall arr x y . (Generic x, Generic y, GMultimap arr x y) => arr -> x -> y

    generic-functor Generic.Functor.Multimap

    Generic n-ary functor. A generalization of gsolomap to map over multiple parameters simultaneously. gmultimap takes a list of functions separated by (:+) and terminated by (). gmultimap is unsafe: misuse will break your programs. The type of every function in the list must be some (a -> b) where a and b are distinct type variables. See the Usage section of gsolomap for details.

    Example

    {-# LANGUAGE DeriveGeneric #-}
    
    import GHC.Generics (Generic)
    import Generic.Functor (gmultimap)
    
    data Three a b c = One a | Two b | Three c
    deriving Generic
    
    mapThree :: (a -> a') -> (b -> b') -> (c -> c') -> Three a b c -> Three a' b' c'
    mapThree f g h = gmultimap (f :+ g :+ h :+ ())
    

  9. gsolomap :: forall a b x y . (Generic x, Generic y, GSolomap a b x y) => (a -> b) -> x -> y

    generic-functor Generic.Functor.Multimap

    Generalized generic functor. gsolomap is a generalization of gfmap (generic fmap), where the type parameter to be "mapped" does not have to be the last one. gsolomap is unsafe: misuse will break your programs. Read the Usage section below for details.

    Example

    {-# LANGUAGE DeriveGeneric #-}
    
    import GHC.Generics (Generic)
    import Generic.Functor (gsolomap)
    
    data Result a r = Error a | Ok r  -- Another name for Either
    deriving Generic
    
    mapError :: (a -> b) -> Result a r -> Result b r
    mapError = gsolomap
    
    mapOk :: (r -> s) -> Result a r -> Result a s
    mapOk = gsolomap
    
    mapBoth :: (a -> b) -> Result a a -> Result b b
    mapBoth = gsolomap
    

    Usage

    (This also applies to solomap, gmultimap, and multimap.) gsolomap should only be used to define polymorphic "fmap-like functions". It works only in contexts where a and b are two distinct, non-unifiable type variables. This is usually the case when they are bound by universal quantification (forall a b. ...), with no equality constraints on a and b. The one guarantee of gsolomap is that gsolomap id = id. Under the above conditions, that law and the types should uniquely determine the implementation, which gsolomap seeks automatically. The unsafety is due to the use of incoherent instances as part of the definition of GSolomap. Functions are safe to specialize after GSolomap (and Solomap) constraints have been discharged. Note also that the type parameters of gsolomap must all be determined by the context. For instance, composing two gsolomap, as in gsolomap f . gsolomap g, is a type error because the type in the middle cannot be inferred.

  10. multimap :: Multimap arr x y => arr -> x -> y

    generic-functor Generic.Functor.Multimap

    Implicit n-ary functor. A generalization of solomap to map over multiple parameters simultaneously. multimap takes a list of functions separated by (:+) and terminated by (). multimap is unsafe: misuse will break your programs. The type of every function in the list must be some (a -> b) where a and b are distinct type variables. See the Usage section of gsolomap for details.

    Example

    type F a b c = Either a (b, c)
    
    map3 :: (a -> a') -> (b -> b') -> (c -> c') -> F a b c -> F a' b' c'
    map3 f g h = multimap (f :+ g :+ h :+ ())
    -- equivalent to:  \f g h -> bimap f (bimap g h)
    

Page 1162 of many | Previous | Next