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

Regards,
Michael Turner
Executive Director
Project Persephone
1-25-33 Takadanobaba
Shinjuku-ku Tokyo 169-0075
Mobile: +81 (90) 5203-8682
turner@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
have another look at https://hackage.haskell.org/packaggetCallStackgetCallStacke/base-4.16.0.0/do... https://hackage.haskell.org/package/base-4.16.0.0/docs/GHC-Stack.html#v:call...
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
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@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

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@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@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
wrote: have another look at
https://hackage.haskell.org/packaggetCallStackgetCallStacke/base-4.16.0.0/do...
< https://hackage.haskell.org/package/base-4.16.0.0/docs/GHC-Stack.html#v:call...
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@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@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@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
--

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 יהושע ולך
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@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@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
wrote: have another look at
https://hackage.haskell.org/packaggetCallStackgetCallStacke/base-4.16.0.0/do...
< https://hackage.haskell.org/package/base-4.16.0.0/docs/GHC-Stack.html#v:call...
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@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@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@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
--
--

http://learnyouahaskell.com/input-and-output
might help.
On Sun, Dec 12, 2021 at 7:09 PM יהושע ולך
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 יהושע ולך
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@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@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
wrote: have another look at
https://hackage.haskell.org/packaggetCallStackgetCallStacke/base-4.16.0.0/do...
< https://hackage.haskell.org/package/base-4.16.0.0/docs/GHC-Stack.html#v:call...
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@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@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@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
--
--
--
participants (2)
-
Michael Turner
-
יהושע ולך