Send Beginners mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
or, via email, send a message with subject or body 'help' to
[email protected]
You can reach the person managing the list at
[email protected]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."
Today's Topics:
1. How to make instance of MonoFunctor (Baa)
2. Re: How to make instance of MonoFunctor (Michael Snoyman)
3. Re: How to make instance of MonoFunctor (Baa)
----------------------------------------------------------------------
Message: 1
Date: Thu, 10 Aug 2017 11:35:52 +0300
From: Baa <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: [Haskell-beginners] How to make instance of MonoFunctor
Message-ID: <20170810113552.08831716@Pavel>
Content-Type: text/plain; charset=UTF-8
Hello, Dear List!
I want to make functor of my type like
newtype UserName = UserName { unName :: Text }
sure, it's impossible, so I will make MonoFunctor instead of (from
library mono-traversable). So, I try:
instance MonoFunctor UserName where
omap fn (UserName n) = UserName $ fn $ n
but I get error
• Couldn't match expected type ‘Element UserName’
with actual type ‘Text’
• In the second argument of ‘($)’, namely ‘unName an’
In the second argument of ‘($)’, namely ‘fn $ unName an’
In the expression: UserName $ fn $ unName an
interesting is that Text "type Element Text" of "type family Element
mono" (instance?). So, how to make mono-functor for such `UserName`
structure?
--
Best regards, Paul
------------------------------
Message: 2
Date: Thu, 10 Aug 2017 11:58:04 +0300
From: Michael Snoyman <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] How to make instance of MonoFunctor
Message-ID:
<CAKT9ecN0ORwDAa=8-DJk87jZtk=nsdln5qgk6c3+orjzjch...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
What do you want the type of `omap` to be for `UserName`? There are two
reasonable definitions:
omap :: (Text -> Text) -> (UserName -> UserName)
omap :: (Char -> Char) -> (UserName -> UserName)
The first one is saying that a UserName is a container of a single Text
value. The second is that a UserName is a container of a sequence of Char
values. Once you figure out what the answer to this question is, you'll
need to use an associated type called Element to specify what you intend,
e.g.:
type Element UserName = Char
On Thu, Aug 10, 2017 at 11:35 AM, Baa <[email protected]> wrote:
> Hello, Dear List!
>
> I want to make functor of my type like
>
> newtype UserName = UserName { unName :: Text }
>
> sure, it's impossible, so I will make MonoFunctor instead of (from
> library mono-traversable). So, I try:
>
> instance MonoFunctor UserName where
> omap fn (UserName n) = UserName $ fn $ n
>
> but I get error
>
> • Couldn't match expected type ‘Element UserName’
> with actual type ‘Text’
> • In the second argument of ‘($)’, namely ‘unName an’
> In the second argument of ‘($)’, namely ‘fn $ unName an’
> In the expression: UserName $ fn $ unName an
>
> interesting is that Text "type Element Text" of "type family Element
> mono" (instance?). So, how to make mono-functor for such `UserName`
> structure?
>
>
> --
> Best regards, Paul
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://mail.haskell.org/pipermail/beginners/attachments/20170810/b45d143e/attachment-0001.html>
------------------------------
Message: 3
Date: Thu, 10 Aug 2017 12:34:30 +0300
From: Baa <[email protected]>
To: [email protected]
Subject: Re: [Haskell-beginners] How to make instance of MonoFunctor
Message-ID: <20170810123430.77e47a39@Pavel>
Content-Type: text/plain; charset=UTF-8
Aha, so I missed:
type instance Element UserName = Text
and now this is right:
instance MonoFunctor UserName where
omap fn n = UserName $ fn $ unName n
Yes, this will be omap :: (Text -> Text) -> (UserName -> UserName).
Many thanks!!
> What do you want the type of `omap` to be for `UserName`? There are
> two reasonable definitions:
>
> omap :: (Text -> Text) -> (UserName -> UserName)
> omap :: (Char -> Char) -> (UserName -> UserName)
>
> The first one is saying that a UserName is a container of a single
> Text value. The second is that a UserName is a container of a
> sequence of Char values. Once you figure out what the answer to this
> question is, you'll need to use an associated type called Element to
> specify what you intend, e.g.:
>
> type Element UserName = Char
>
> On Thu, Aug 10, 2017 at 11:35 AM, Baa <[email protected]> wrote:
>
> > Hello, Dear List!
> >
> > I want to make functor of my type like
> >
> > newtype UserName = UserName { unName :: Text }
> >
> > sure, it's impossible, so I will make MonoFunctor instead of (from
> > library mono-traversable). So, I try:
> >
> > instance MonoFunctor UserName where
> > omap fn (UserName n) = UserName $ fn $ n
> >
> > but I get error
> >
> > • Couldn't match expected type ‘Element UserName’
> > with actual type ‘Text’
> > • In the second argument of ‘($)’, namely ‘unName an’
> > In the second argument of ‘($)’, namely ‘fn $ unName an’
> > In the expression: UserName $ fn $ unName an
> >
> > interesting is that Text "type Element Text" of "type family Element
> > mono" (instance?). So, how to make mono-functor for such `UserName`
> > structure?
> >
> >
> > --
> > Best regards, Paul
> > _______________________________________________
> > Beginners mailing list
> > [email protected]
> > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
> >
------------------------------
Subject: Digest Footer
_______________________________________________
Beginners mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
------------------------------
End of Beginners Digest, Vol 110, Issue 13
******************************************