leLex l n ('`':c:cs)
   | isAlpha c
   = case leChunk (n+1) isAlpha cs of
        (restSym, nn, restInput) -> case restInput of
           []        -> leFail l nn "  `  expected"
           ('`':as)  -> (l, n, if isUpper c then Lconop else Lvarop, c:restSym) 
                        : leLex l (nn+1) as
           (_:_)     -> leFail l nn "  `  expected"
   | otherwise
   = leFail l n "Bad infix operator"
leLex l n ('`':c:cs)
   | isAlpha c
   = case leChunk (n+1) isAlpha cs of
        (restSym, nn, restInput) -> case restInput of
           []        -> leFail l nn "  `  expected"
           ('`':as)  -> (l, n, if isUpper c then Lconop else Lvarop, c:restSym) 
                        : leLex l (nn+1) as
           (_:_)     -> leFail l nn "  `  expected"
   | otherwise
   = leFail l n "Bad infix operator"
leLex l n ('`':c:cs)
   | isAlpha c
   = case leChunk (n+1) isAlpha cs of
        (restSym, nn, restInput) -> case restInput of
           []        -> leFail l nn "  `  expected"
           ('`':as)  -> (l, n, if isUpper c then Lconop else Lvarop, c:restSym) 
                        : leLex l (nn+1) as
           (_:_)     -> leFail l nn "  `  expected"
   | otherwise
   = leFail l n "Bad infix operator"