Is there an inverse of the Haskell $ operator?

前端 未结 6 413
感情败类
感情败类 2021-02-01 13:44

A quick question, is there an operator in Haskell that works like the dollar sign but gives precedence to the left hand side. I.E. instead of

f (x 1) 


        
相关标签:
6条回答
  • 2021-02-01 14:18

    This combinator is defined (tongue in cheek) in the data-aviary package:

    Prelude Data.Aviary.BirdsInter> 1 `thrush` (+2)
    Loading package data-aviary-0.2.3 ... linking ... done.
    3
    

    Although actually using that package is a rather silly thing to do, reading the source is fun, and reveals that this combinator is formed via the magic incantation of flip id (or, in ornithological parlance, cardinal idiot).

    0 讨论(0)
  • 2021-02-01 14:21

    I am not aware of any standard version, but I've seen (#) used for that purpose in a couple places. The one in particular that comes to mind is HOC, which uses it in an idiom like:

    someObject # someMessage param1 param2
    

    I seem to recall seeing other "object-oriented" libraries using the # operator in the same way, but cannot remember how many or which ones.

    0 讨论(0)
  • 2021-02-01 14:22

    I do not know, whether there is an standart operator, but what prevents you from writing your own? This works in ghci:

    Prelude> let a $> b = b a
    Prelude> 1 $> (+2)
    3
    Prelude> sum [1, 2] $> (+2)
    5
    Prelude> map (+2) [1, 2] $> map (+3)
    [6,7]
    

    UPDATE: searching on hoogle for a -> (a -> b) -> b (it is the type of this operator) found nothing useful.

    0 讨论(0)
  • 2021-02-01 14:24

    As of GHC 7.10 (base 4.8.0.0), & is in Data.Function: https://hackage.haskell.org/package/base-4.8.0.0/docs/Data-Function.html

    0 讨论(0)
  • 2021-02-01 14:24

    Can't you just redefine $.

    let ($) x f = f x
    

    Or just choose a different operator, like $$

    0 讨论(0)
  • 2021-02-01 14:35

    In Haskell you can use flip to change arguments' order of any binary function or operator:

    ghci> let (|>) = flip ($)
    ghci> 3 |> (+4) |> (*6)
    42
    
    0 讨论(0)
提交回复
热议问题