Send Beginners mailing list submissions to
        beginners@haskell.org

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
        beginners-requ...@haskell.org

You can reach the person managing the list at
        beginners-ow...@haskell.org

When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."


Today's Topics:

   1. Re:  Defined list data type compared to Haskell   List
      (Lawrence Bottorff)
   2. Re:  Defined list data type compared to Haskell   List
      (David McBride)
   3. Re:  Defined list data type compared to Haskell   List
      (Lawrence Bottorff)


----------------------------------------------------------------------

Message: 1
Date: Tue, 26 Jan 2021 15:49:26 -0600
From: Lawrence Bottorff <borg...@gmail.com>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <beginners@haskell.org>
Subject: Re: [Haskell-beginners] Defined list data type compared to
        Haskell List
Message-ID:
        <cafahfsurabudepwquwxk0jokgqvrechwp3f8o45koogoeso...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

So NestedList is using regular List? So in

data NestedList a = Elem a | List [NestedList a]

the second data constructor List [NestedList a] we see a "regular" list
because of the square brackets?

On Tue, Jan 26, 2021 at 3:42 PM David McBride <toa...@gmail.com> wrote:

> In NestedList, the List constructor takes a regular list of NestedLists.
> Therefore when pattern matching on it you can get access to those nested
> lists.  In your code, x is the first NestedList, and xs is the rest of the
> NestedLists.
>
> On Tue, Jan 26, 2021 at 4:32 PM Lawrence Bottorff <borg...@gmail.com>
> wrote:
>
>> I'm following this <https://wiki.haskell.org/99_questions/Solutions/7>
>> and yet I see this solution
>>
>> data NestedList a = Elem a | List [NestedList a] deriving (Show)
>>
>> flatten1 :: NestedList a -> [a]
>> flatten1 (Elem a   )   = [a]
>> flatten1 (List (x:xs)) = flatten1 x ++ flatten1 (List xs)
>> flatten1 (List [])     = []
>>
>> What I find puzzling is this line
>>
>> flatten1 (List (x:xs)) = flatten1 x ++ flatten1 (List xs)
>>
>> where I see
>>
>> (List (x:xs)) as an argument. How is the NestedList type also able to be
>> expressed as a normal consed list with x:xs argument? How is (:)
>> interacting with NestedList?
>>
>> LB
>> _______________________________________________
>> Beginners mailing list
>> Beginners@haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>
> _______________________________________________
> Beginners mailing list
> Beginners@haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://mail.haskell.org/pipermail/beginners/attachments/20210126/3f4e6f0f/attachment-0001.html>

------------------------------

Message: 2
Date: Tue, 26 Jan 2021 17:04:54 -0500
From: David McBride <toa...@gmail.com>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <beginners@haskell.org>
Subject: Re: [Haskell-beginners] Defined list data type compared to
        Haskell List
Message-ID:
        <CAN+Tr42n7LVn=u4gaqyp+tf9q9ea5xq9xggd3cs6aucsxaq...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

Right that is a plain list of NestedLists.  So if you were to rewrite [a]
as (Regularlist a) so to speak (not a real type), the definition of
NestedList would be List (RegularList (NestedList a)).

Keep in mind that List is a constructor, everything after it is types.

On Tue, Jan 26, 2021 at 4:50 PM Lawrence Bottorff <borg...@gmail.com> wrote:

> So NestedList is using regular List? So in
>
> data NestedList a = Elem a | List [NestedList a]
>
> the second data constructor List [NestedList a] we see a "regular" list
> because of the square brackets?
>
> On Tue, Jan 26, 2021 at 3:42 PM David McBride <toa...@gmail.com> wrote:
>
>> In NestedList, the List constructor takes a regular list of NestedLists.
>> Therefore when pattern matching on it you can get access to those nested
>> lists.  In your code, x is the first NestedList, and xs is the rest of the
>> NestedLists.
>>
>> On Tue, Jan 26, 2021 at 4:32 PM Lawrence Bottorff <borg...@gmail.com>
>> wrote:
>>
>>> I'm following this <https://wiki.haskell.org/99_questions/Solutions/7>
>>> and yet I see this solution
>>>
>>> data NestedList a = Elem a | List [NestedList a] deriving (Show)
>>>
>>> flatten1 :: NestedList a -> [a]
>>> flatten1 (Elem a   )   = [a]
>>> flatten1 (List (x:xs)) = flatten1 x ++ flatten1 (List xs)
>>> flatten1 (List [])     = []
>>>
>>> What I find puzzling is this line
>>>
>>> flatten1 (List (x:xs)) = flatten1 x ++ flatten1 (List xs)
>>>
>>> where I see
>>>
>>> (List (x:xs)) as an argument. How is the NestedList type also able to be
>>> expressed as a normal consed list with x:xs argument? How is (:)
>>> interacting with NestedList?
>>>
>>> LB
>>> _______________________________________________
>>> Beginners mailing list
>>> Beginners@haskell.org
>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>>
>> _______________________________________________
>> Beginners mailing list
>> Beginners@haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>
> _______________________________________________
> Beginners mailing list
> Beginners@haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://mail.haskell.org/pipermail/beginners/attachments/20210126/f007a42d/attachment-0001.html>

------------------------------

Message: 3
Date: Tue, 26 Jan 2021 16:39:11 -0600
From: Lawrence Bottorff <borg...@gmail.com>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <beginners@haskell.org>
Subject: Re: [Haskell-beginners] Defined list data type compared to
        Haskell List
Message-ID:
        <cafahfsxfe01rkd_wwfsjm4yy-ecdgmccpk944bwoauu1bhg...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

Why can I not do this?

data NestedList1 a = Elem a | NList (NestedList1 a)

that is, with parens rather than square brackets, then

myList2 = (NList (Elem 1, NList (Elem 2, NList (Elem 3, Elem 4), Elem 5)))

It gives the error

<interactive>:383:18-73: error:
    ,* Couldn't match expected type `NestedList1 a'
                  with actual type `(NestedList1 Integer, NestedList1 a0)'
    ,* In the first argument of `NList', namely
        `(Elem 1, NList (Elem 2, NList (Elem 3, Elem 4), Elem 5))'
      In the expression:
        (NList (Elem 1, NList (Elem 2, NList (Elem 3, Elem 4), Elem 5)))
      In an equation for `myList2':
          myList2
            = (NList (Elem 1, NList (Elem 2, NList (Elem 3, Elem 4), Elem
5)))
    ,* Relevant bindings include
        myList2 :: NestedList1 a (bound at <interactive>:383:1)

etc., etc.

On Tue, Jan 26, 2021 at 4:05 PM David McBride <toa...@gmail.com> wrote:

> Right that is a plain list of NestedLists.  So if you were to rewrite [a]
> as (Regularlist a) so to speak (not a real type), the definition of
> NestedList would be List (RegularList (NestedList a)).
>
> Keep in mind that List is a constructor, everything after it is types.
>
> On Tue, Jan 26, 2021 at 4:50 PM Lawrence Bottorff <borg...@gmail.com>
> wrote:
>
>> So NestedList is using regular List? So in
>>
>> data NestedList a = Elem a | List [NestedList a]
>>
>> the second data constructor List [NestedList a] we see a "regular" list
>> because of the square brackets?
>>
>> On Tue, Jan 26, 2021 at 3:42 PM David McBride <toa...@gmail.com> wrote:
>>
>>> In NestedList, the List constructor takes a regular list of
>>> NestedLists.  Therefore when pattern matching on it you can get access to
>>> those nested lists.  In your code, x is the first NestedList, and xs is the
>>> rest of the NestedLists.
>>>
>>> On Tue, Jan 26, 2021 at 4:32 PM Lawrence Bottorff <borg...@gmail.com>
>>> wrote:
>>>
>>>> I'm following this <https://wiki.haskell.org/99_questions/Solutions/7>
>>>> and yet I see this solution
>>>>
>>>> data NestedList a = Elem a | List [NestedList a] deriving (Show)
>>>>
>>>> flatten1 :: NestedList a -> [a]
>>>> flatten1 (Elem a   )   = [a]
>>>> flatten1 (List (x:xs)) = flatten1 x ++ flatten1 (List xs)
>>>> flatten1 (List [])     = []
>>>>
>>>> What I find puzzling is this line
>>>>
>>>> flatten1 (List (x:xs)) = flatten1 x ++ flatten1 (List xs)
>>>>
>>>> where I see
>>>>
>>>> (List (x:xs)) as an argument. How is the NestedList type also able to
>>>> be expressed as a normal consed list with x:xs argument? How is (:)
>>>> interacting with NestedList?
>>>>
>>>> LB
>>>> _______________________________________________
>>>> Beginners mailing list
>>>> Beginners@haskell.org
>>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>>>
>>> _______________________________________________
>>> Beginners mailing list
>>> Beginners@haskell.org
>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>>
>> _______________________________________________
>> Beginners mailing list
>> Beginners@haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>
> _______________________________________________
> Beginners mailing list
> Beginners@haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://mail.haskell.org/pipermail/beginners/attachments/20210126/4219ed44/attachment.html>

------------------------------

Subject: Digest Footer

_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners


------------------------------

End of Beginners Digest, Vol 150, Issue 15
******************************************

Reply via email to