[Haskell-cafe] Using Haskell types in a database

Bob Ippolito bob at redivi.com
Tue Feb 10 18:11:08 UTC 2015


If you're using Postgres you can use types in the database
http://www.postgresql.org/docs/9.2/static/sql-createtype.html

I don't know what these look like from the Haskell drivers but you can have
typed SQL if you want it.

On Tuesday, February 10, 2015, Nikita Karetnikov <nikita at karetnikov.org>
wrote:

> > That part I don't understand.  Why does your proposal require varchars
> > everywhere?
>
> That's what Persistent generates (using derivePersistField) for the
> second table.  For example, the Haskell value
>
> MyText "foo"
>
> where MyText is
>
> newtype MyText = MyText Text deriving (Show, Read)
> derivePersistField "MyText"
>
> will be stored in PostgreSQL as a varchar
>
> 'MyText "foo"'
>
> I assume that Persistent (or its PostgreSQL backend) has a predefined
> mapping from a commonly used Haskell types to the database types.
> And everything else is represented as a varchar.
>
> So there are two choices, corresponding to the two tables shown in the
> original message:
>
> 1. Design tables with the (basic) database types in mind (integer,
>    boolean, timestamp, varchar, etc.) then wrap and unwrap values each
>    time you interact with the database.
>
> 2. Use Haskell types like MyText or something more complex directly
>    and end up with varchar everywhere.
>
> I wonder how bad is the second option in practice because
> wrapping/unwrapping is error-prone.  Of course, the varchar thing makes
> the alarm bells ring in my head, but when does it significantly affect
> performance?  For example, maybe it's okay for a small shop, or is it a
> no go for everyone?
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20150210/26906375/attachment.html>


More information about the Haskell-Cafe mailing list