I am new to Haskell, and I try to understand how to do IO correctly.
The following works ok:
main = do
action <- cmdParser
putStrLn "Username to add to the password manager:"
username <- getLine
case action of
Add -> persist entry
where
entry = Entry username "somepassword"
Whereas the following results in compilation error:
main = do
action <- cmdParser
case action of
Add -> persist entry
where
entry = Entry promptUsername "somepassword"
promptUsername = do
putStrLn "Username to add to the password manager:"
username <- getLine
The error is here:
Couldn't match expected type `IO b0' with actual type `[Char]'
Expected type: IO b0
Actual type: String
In the expression: username
[...]
What is going on here? Why the first version works, while the second one does not?
I know that in Stack Overflow there are a few similar questions like this, but none of them seemed to explain this problem to me.
username
is a String
, but promptUsername
is an IO String
. You need to do something like:
username <- promptUsername
let entry = Entry username "somepassword"
persist entry
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With