
Hi everyone, Consider the following code: -------------- import Prelude hiding ((+)) data Expr = Plus Expr Expr | Minus Expr Expr | Expr String deriving Show f :: Expr -> Int f (Plus _ _) = 1 f (Minus _ _) = 2 -- infix (f (Plus undefined undefined)) + -- (*) infix 6 + (+) :: Expr -> Expr -> Expr e1 + e2 = Plus e1 e2 main = do let a = Expr "a" let b = Expr "b" print $ a + b -------------- I would like to declare the infix precedence of (+) with a function (commented line (*)) instead of directly as above. Is there any means to do that? Do we need some kind of preprocessing machinery? How to do that in Haskell? In a more general way, let us suppose I have a Haskell library able to perform some calculations: how to use it in a pre-processing step, before compilation of the executable? It could be a function to compute symbolically roots of a polynomial of second degree to be used at runtime. We would put some placeholders in the code where the result of the pre- processing calculation would enter. Thanks in advance, TP