<div dir="ltr">No, and thank you and <a href="mailto:astrohavoc@gmail.com">astrohavoc@gmail.com</a> for pointing it out.  I was going "There *has to be* a better solution to this".</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Feb 27, 2018 at 3:10 PM, Tom Ellis <span dir="ltr"><<a href="mailto:tom-lists-haskell-cafe-2013@jaguarpaw.co.uk" target="_blank">tom-lists-haskell-cafe-2013@jaguarpaw.co.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Tue, Feb 27, 2018 at 02:53:33PM +0000, Brian Hurt wrote:<br>
> I'm looking for pointers on how to do something.  What I'm trying to do: I<br>
> want to define a newtype wrapper for database connections with a phantom<br>
> type to control whether the connection is read-only or read-write.  So I<br>
> have:<br>
><br>
>     newtype Conn a = Conn { unConn :: Connection }<br>
><br>
>     data ReadOnly = ReadOnly<br>
><br>
>     data ReadWrite = ReadWrite<br>
><br>
>     -- Simplifying here<br>
>     openConn :: MonadIO m => a -> Conn a<br>
><br>
>     query :: (MonadIO m, ToRow r, FromRow s) => Conn a -> Query -> r -> m<br>
> [s]<br>
><br>
>     execute :: (MonadIO m, ToRow r) => Conn a -> Query -> r -> m Int64<br>
><br>
> But I want to be able to restrict the type a to be either ReadOnly or<br>
> ReadWrite.  Solutions I've come up with so far are:<br>
</span>[...]<br>
<span class="">> Are their alternatives I haven't considered yet?<br>
<br>
</span>Have you considered<br>
<br>
   {-# LANGUAGE DataKinds #-}<br>
<br>
   data Read = ReadOnly | ReadWrite<br>
<br>
?<br>
______________________________<wbr>_________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell-<wbr>cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div><br></div>