从另一个函数Haskell获取返回值
我试图从这个函数中获取值,所以,当我调用这个函数“prompt”时,我会发送一条消息,这个函数返回一个与我提出的假设问题一致的值 但我不能接受那个值,为什么? 我和哈斯克尔在一起从另一个函数Haskell获取返回值,haskell,Haskell,我试图从这个函数中获取值,所以,当我调用这个函数“prompt”时,我会发送一条消息,这个函数返回一个与我提出的假设问题一致的值 但我不能接受那个值,为什么? 我和哈斯克尔在一起 module Main (main) where import System.IO (stdout, hSetBuffering, BufferMode(NoBuffering)) type State = Double main::IO() prompt::Read a => String -> I
module Main (main) where
import System.IO (stdout, hSetBuffering, BufferMode(NoBuffering))
type State = Double
main::IO()
prompt::Read a => String -> IO a
main = do putStrLn "Testing"
v <- prompt "Whats your name?"
return ()
prompt str = do putStrLn str
valor <- readLn
return valor
主模块(Main),其中
导入System.IO(标准输出、hSetBuffering、缓冲模式(无缓冲))
类型状态=双
main::IO()
提示符::读取a=>String->IO a
main=执行putStrLn“测试”
我相信你的问题只限于你的打字签名
prompt :: Read a => String -> IO a
此类型签名表示,prompt
是一个函数,它接受一个字符串,执行一些I/O魔术,然后为用户希望的任何可读类型a
返回类型为a
的值。但是,您的实现从用户那里获取一个字符串并返回它
如果您希望提示符
返回字符串,只需更改类型即可
prompt :: Read a => String -> IO a
如果您的真正意图是提示符
返回某个用户指定类型的值,那么您需要在实际读取该值时解决歧义
prompt :: Read a => String -> IO a
prompt str = do putStrLn str
valor <- readLn
return valor
(或者,对于整数,IO Int
,对于Double,IO Double
或任何其他可读类型)
但是,您很可能希望提示符
始终返回字符串。因此,我推荐第一种解决方案,因为它对用户来说更直观。大概,您希望v
类型为String
,但编译器无法知道这一点。read valor
步骤是多余的readLn
已经有了类型Read a=>IO a
@4castle我今天学到了一些东西。我想除了字符串之外,我从来没有使用过readLn
。谢谢你的更正!:)也许您正在考虑getLine
?它确实有类型IO字符串
v <- prompt "Whats your name?" :: IO String