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. Re: Beginners Digest, Vol 161, Issue 1 (יהושע ולך)
2. Re: Non-exhaustive patterns (Jeffrey Brown)
----------------------------------------------------------------------
Message: 1
Date: Sun, 12 Dec 2021 19:11:25 +0200
From: יהושע ולך <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] Beginners Digest, Vol 161, Issue 1
Message-ID:
<CAMcanRW=kiqXPikvRz_v0AAyCpdptSyaxs9=+cd4d6ssf6r...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
http://learnyouahaskell.com/input-and-output
might help.
On Sun, Dec 12, 2021 at 7:09 PM יהושע ולך <[email protected]> wrote:
> The important thing here, is that print is a function from a "pure" value
> (any type implements the Show typeclass. (similar to trait in rust, or
> interface in some languages))
> and creates a "IO" value, which can be thought of as a IO action. inside
> the IO monad, that just means running it.
>
>
> On Sun, Dec 12, 2021 at 7:05 PM יהושע ולך <[email protected]>
> wrote:
>
>> Notice: (from ghci)
>>
>> Prelude GHC.Stack> :t callStack
>> callStack :: CallStack
>> Prelude GHC.Stack> :t getCallStack
>> getCallStack :: CallStack -> [([Char], SrcLoc)]
>> Prelude GHC.Stack> :t getCallStack callStack
>> getCallStack callStack :: [([Char], SrcLoc)]
>> Prelude GHC.Stack> :t length (getCallStack callStack)
>> length (getCallStack callStack) :: Int
>>
>> Prelude GHC.Stack> :t print (length (getCallStack callStack))
>> print (length (getCallStack callStack)) :: IO ()
>>
>> Prelude GHC.Stack> :t print
>> print :: Show a => a -> IO ()
>>
>>
>> the `print` function takes a pure value, and creates an IO value from it.
>> (actually printing is an IO action. the value it prints is not)
>>
>>
>>
>> On Sun, Dec 12, 2021 at 5:32 PM Michael Turner <
>> [email protected]> wrote:
>>
>>> Regards,
>>> Michael Turner
>>> Executive Director
>>> Project Persephone
>>> 1-25-33 Takadanobaba
>>>
>>> Shinjuku-ku Tokyo 169-0075
>>> Mobile: +81 (90) 5203-8682
>>> [email protected]
>>>
>>> Understand - http://www.projectpersephone.org/
>>> Join - http://www.facebook.com/groups/ProjectPersephone/
>>> Donate - http://www.patreon.com/ProjectPersephone
>>> Volunteer - https://github.com/ProjectPersephone
>>>
>>> "Love does not consist in gazing at each other, but in looking outward
>>> together in the same direction." -- Antoine de Saint-Exupéry
>>>
>>>
>>>
>>>
>>> On Sun, Dec 12, 2021 at 8:48 PM <[email protected]> wrote:
>>>
>>>
>>> > have another look at
>>> >
>>> https://hackage.haskell.org/packaggetCallStackgetCallStacke/base-4.16.0.0/docs/GHC-Stack.html#v:callStack
>>> > <
>>> https://hackage.haskell.org/package/base-4.16.0.0/docs/GHC-Stack.html#v:callStack
>>> >
>>>
>>> I'd been looking at that already, over and over. Still not seeing it.
>>> But your proposed fix does work. Thank you.
>>> > let l = getCallStack callStack
>>> > print (length l)
>>> > ```
>>> > the `getCallStack` does not return an "IO" value..
>>>
>>> And yet it's it's somehow an IO value in "print (length (getCallStack
>>> callStack))"?
>>>
>>> I just don't get this.
>>>
>>> > On Sun, Dec 12, 2021, 12:58 Michael Turner <
>>> [email protected]>
>>> > wrote:
>>> >
>>> > > The following prints 1, as you'd expect:
>>> > > -----------------
>>> > > import GHC.Stack
>>> > >
>>> > > foo :: HasCallStack => IO ()
>>> > > foo = do
>>> > > print (length (getCallStack callStack))
>>> > >
>>> > > main =
>>> > > foo
>>> > > -------------------
>>> > > But when I make it this:
>>> > > ...
>>> > > l <- getCallStack callStack ;
>>> > > print (length l)
>>> > >
>>> > > I get all this:
>>> > > ------------------------------------------
>>> > > ...
>>> > > • Couldn't match type ‘[]’ with ‘IO’
>>> > > Expected type: IO ([Char], SrcLoc)
>>> > > Actual type: [([Char], SrcLoc)]
>>> > > • In a stmt of a 'do' block: l <- getCallStack callStack
>>> > > In the expression:
>>> > > do l <- getCallStack callStack
>>> > > print (length l)
>>> > > In an equation for ‘foo’:
>>> > > foo
>>> > > = do l <- getCallStack callStack
>>> > > print (length l)
>>> > > |
>>> > > 5 | l <- getCallStack callStack ;
>>> > > | ^^^^^^^^^^^^^^^^^^^^^^
>>> > > --------------------------------------------
>>> > >
>>> > > What am I not seeing?
>>> > >
>>> > >
>>> > > Regards,
>>> > > Michael Turner
>>> > > Executive Director
>>> > > Project Persephone
>>> > > 1-25-33 Takadanobaba
>>> > >
>>> > > Shinjuku-ku Tokyo 169-0075
>>> > > Mobile: +81 (90) 5203-8682
>>> > > [email protected]
>>> > >
>>> > > Understand - http://www.projectpersephone.org/
>>> > > Join - http://www.facebook.com/groups/ProjectPersephone/
>>> > > Donate - http://www.patreon.com/ProjectPersephone
>>> > > Volunteer - https://github.com/ProjectPersephone
>>> > >
>>> > > "Love does not consist in gazing at each other, but in looking
>>> outward
>>> > > together in the same direction." -- Antoine de Saint-Exupéry
>>> _______________________________________________
>>> 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/20211212/9d45c4e9/attachment-0001.html>
------------------------------
Message: 2
Date: Sun, 12 Dec 2021 14:08:49 -0500
From: Jeffrey Brown <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] Non-exhaustive patterns
Message-ID:
<caec4ma1ojmtrrfevmmvpmutxla1wjkg3us7l0qwfd1vjfya...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
The function as written assumes that if the first argument is not zero,
then the second argument is nonempty. But if you try to take5 from a list
of length 2 that way, you'll eventually be asking for `myTake 3 []`, which
there's no way to evaluate.
On Sun, Dec 12, 2021 at 12:14 AM Galaxy Being <[email protected]> wrote:
> This code
>
> myTakePM :: Int -> [a] -> [a]
> myTakePM 0 _ = []
> myTakePM n (x:xs) = x : myTakePM (n-1) xs
>
> is bad because it allows
>
> myTakePM 4 [1,2,3]
> [1,2,3*** Exception: <interactive>:(395,1)-(396,41): Non-exhaustive
> patterns in function myTakePM
>
> I knew it would not work, but why is it calling this essentially a partial
> function? How does it know this? Again, I expected an error, but what is
> this Non-exhaustive patterns in function myTakePM saying? Or, said
> another way, what exactly is non-exhaustive about this?
> --
> ⨽
> Lawrence Bottorff
> Grand Marais, MN, USA
> [email protected]
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
--
Jeff Brown | Jeffrey Benjamin Brown
LinkedIn <https://www.linkedin.com/in/jeffreybenjaminbrown> | Github
<https://github.com/jeffreybenjaminbrown> | Twitter
<https://twitter.com/carelogic> | Facebook
<https://www.facebook.com/mejeff.younotjeff>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://mail.haskell.org/pipermail/beginners/attachments/20211212/7ff8e5b3/attachment-0001.html>
------------------------------
Subject: Digest Footer
_______________________________________________
Beginners mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
------------------------------
End of Beginners Digest, Vol 161, Issue 3
*****************************************