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

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


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/c4e14a6b/attachment-0001.html>


More information about the Beginners mailing list