Skip to content

Ambiguous infix expression involving splice and quasi-quoter #21

Open
@ddssff

Description

@ddssff

I'm pretty sure the module below loads into ghci but fails to parse regardless of the parse extensions. If you have hsx2hs installed and put {-# OPTIONS_GHC -F -pgmFhsx2hs #-} it will fail.

{-# LANGUAGE TemplateHaskell #-}
module Bug where

import Control.Applicative ((<$>))
import Control.Monad.Reader (ask)
import Language.Haskell.Exts.Syntax as S
import Language.Haskell.TH as TH

getOne = undefined
getEQ = undefined
tName = undefined
siteRecords = undefined

type Site = ()

idTypeName = undefined
typ = undefined
rowTypeName = undefined
tableFieldName = undefined
getEventFnName = undefined

data Rec
    = Row {recDecl :: S.Decl, recIndexTypes :: [String]}
    | Rec {recDecl :: S.Decl} deriving (Eq, Ord, Show)

inferGetByEvent (Row decl@(DataDecl _ _ _ (Ident row@(r:ow)) _ _ _) types) =
      do let getBy = mkName $ getEventFnName decl
         i <- newName "i"
         s <- sigD getBy [t| $(idTypeName decl >>= conT) -> $(typ "Query") $(typ "AppState") (Maybe $(rowTypeName decl >>= conT)) |]
         x <- funD getBy [clause [varP i] (normalB [|getOne . getEQ $(varE i) . $(tableFieldName decl >>= varE) <$> ask|]) []]
         return [s, x]
inferGetByEvent _ = error "inferGetByEvent"

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions