[Haskell-beginners] Beginners Digest, Vol 161, Issue 1

יהושע ולך yehoshuapw at gmail.com
Sun Dec 12 17:11:25 UTC 2021


http://learnyouahaskell.com/input-and-output

might help.


‪On Sun, Dec 12, 2021 at 7:09 PM ‫יהושע ולך‬‎ <yehoshuapw at gmail.com> 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 ‫יהושע ולך‬‎ <yehoshuapw at gmail.com>
> 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 <
>> michael.eugene.turner at gmail.com> wrote:
>>
>>> Regards,
>>> Michael Turner
>>> Executive Director
>>> Project Persephone
>>> 1-25-33 Takadanobaba
>>>
>>> Shinjuku-ku Tokyo 169-0075
>>> Mobile: +81 (90) 5203-8682
>>> turner at projectpersephone.org
>>>
>>> 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 <beginners-request at haskell.org> 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 <
>>> michael.eugene.turner at gmail.com>
>>> > 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
>>> > > turner at projectpersephone.org
>>> > >
>>> > > 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
>>> Beginners at 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/20211212/9d45c4e9/attachment.html>


More information about the Beginners mailing list