[Haskell-cafe] Type level variants

Brian Hurt bhurt at spnz.org
Tue Feb 27 18:32:10 UTC 2018


No, and thank you and astrohavoc at gmail.com for pointing it out.  I was
going "There *has to be* a better solution to this".

On Tue, Feb 27, 2018 at 3:10 PM, Tom Ellis <
tom-lists-haskell-cafe-2013 at jaguarpaw.co.uk> wrote:

> On Tue, Feb 27, 2018 at 02:53:33PM +0000, Brian Hurt wrote:
> > I'm looking for pointers on how to do something.  What I'm trying to do:
> I
> > want to define a newtype wrapper for database connections with a phantom
> > type to control whether the connection is read-only or read-write.  So I
> > have:
> >
> >     newtype Conn a = Conn { unConn :: Connection }
> >
> >     data ReadOnly = ReadOnly
> >
> >     data ReadWrite = ReadWrite
> >
> >     -- Simplifying here
> >     openConn :: MonadIO m => a -> Conn a
> >
> >     query :: (MonadIO m, ToRow r, FromRow s) => Conn a -> Query -> r -> m
> > [s]
> >
> >     execute :: (MonadIO m, ToRow r) => Conn a -> Query -> r -> m Int64
> >
> > But I want to be able to restrict the type a to be either ReadOnly or
> > ReadWrite.  Solutions I've come up with so far are:
> [...]
> > Are their alternatives I haven't considered yet?
>
> Have you considered
>
>    {-# LANGUAGE DataKinds #-}
>
>    data Read = ReadOnly | ReadWrite
>
> ?
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20180227/d8e40731/attachment.html>


More information about the Haskell-Cafe mailing list