8000 Provide my own formatting of types via custom typeclass · Issue #91 · guibou/PyF · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
Provide my own formatting of types via custom typeclass #91
Open
@Profpatsch

Description

@Profpatsch

I want to make it possible to have a simple derive clause for a newtype like

newtype Username = Username Text
  deriving newtype FormatQuote

and then automatically have that type implement PyFToString and all relevant mechanisms, so that when I write

let u = Username "myuser"
in [fmt|There was a problem with user {u}!|]

it will use a magical formatting that we define somehow, and the result will be:

There was a problem with user "myuser"

where the quotes get automatically added by the way FormatQuote is implemented.

I don’t know if this is possible at all, but it would be cool to have somehow.

I guess the closest is the following snippet:

class FormatQuote a where
  q :: a -> FormatQuoteT

instance FormatQuote Text where
  q t = FormatQuoteT $ textToString t

newtype FormatQuoteT = FormatQuoteT String

type instance PyF.PyFClassify FormatQuoteT = 'PyF.PyFString

instance PyF.PyFToString FormatQuoteT where
  pyfToString (FormatQuoteT s) =  "\"" <> s <> "\""

which lets me do

let u = Username "myuser" in [fmt|{q u}|]
"\"myuser\""

however, this means I always have to remember to use q and also the q symbol is not available in any of my code.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0