[Haskell-cafe] attpoarsec and recursive parsing

PICCA Frederic-Emmanuel frederic-emmanuel.picca at synchrotron-soleil.fr
Fri Oct 18 14:13:42 UTC 2024


Hello

I have this type

data MaskLocation = MaskLocation Text
                  | MaskLocation'Tmpl Text
                  | MaskLocation'Or MaskLocation MaskLocation
	deriving (Eq, Generic, Show)
	deriving anyclass (FromJSON, ToJSON)

instance FieldEmitter MaskLocation where
  fieldEmitter (MaskLocation t) = t
  fieldEmitter (MaskLocation'Tmpl t) = t
  fieldEmitter (MaskLocation'Or l r) = fieldEmitter l <> " | " <> fieldEmitter r

I just added the MaskLocation'Or constructor in order to  allow writing

"mymask.npy | mymask2.npy | ..."

So my question how should I write the new parser

here the parser for the MaskLocation without the MaskLocation'Or


instance FieldParsable MaskLocation where
  fieldParser =	do
    t ← takeText
    pure $ if "{scannumber:" `Data.Text.isInfixOf` t
           then MaskLocation'Tmpl t
           else MaskLocation t

It seems to me that I need to consume all text until I find a '|', call the parser on the collected text and start again the process.
But I do not have a  clear idea of how to collect all the values once the process is over.

If someone could help me design this parser, It would be great.

thanks a lot

Frederic


More information about the Haskell-Cafe mailing list