Haskell 类型是什么;显示a=>;也许a->;IO()”;意思是
我有一个代码片段,如下所示Haskell 类型是什么;显示a=>;也许a->;IO()”;意思是,haskell,types,Haskell,Types,我有一个代码片段,如下所示 displayAge :: Show a => Maybe a -> IO () displayAge maybeAge = case maybeAge of Nothing -> putStrLn "Invalid year" Just maybeAge -> putStrLn $ show maybeAge 此函数从控制台获取其参数,并通过readMay函数传递给它,如下所示: main = do putStrLn
displayAge :: Show a => Maybe a -> IO ()
displayAge maybeAge =
case maybeAge of
Nothing -> putStrLn "Invalid year"
Just maybeAge -> putStrLn $ show maybeAge
此函数从控制台获取其参数,并通过readMay
函数传递给它,如下所示:
main = do
putStrLn "Your birth year"
strYear <- getLine
let maybeAge = do
intYear <- readMay strYear
return (processYear intYear)
displayAge maybeAge
main=do
putStrLn“你的出生年份”
strYeardisplayAge
采用类型为a
的值,其中a
是任何类型的Show
n
首先读取Haskell签名中=>
右侧的内容通常是有用的,即可能是a->IO()
显示
获取类型为a
的可能是的值,其中a
是可以显示的任何类型
首先阅读Haskell签名中=>
右侧的内容通常很有用,即可能是一个->IO()
,因此,这是一个类型声明,因此它将告诉您需要向函数displayAge
提供什么才能让类型检查器满意。下面的几行实际上描述了函数的工作方式。类型声明是(几乎总是)可选的,但它们是重要的文档,并且经常使错误消息更有意义,因为编译器现在知道您想做什么,并且可以将其与您实际做的进行比较
显示一个
声明的第一部分,即=>
前面的一段,告诉我们一些关于a
的事情。我们注意到a
是小写,因此它不是一个类型,而是一个类型变量。当您实际使用displayAge
功能时,您可以使用您想要的任何类型来代替a
(Int、String、[Double]等),但这表示该类型必须有一个Show
实例。所以几乎任何类型的函数都不是。如果haskell中的类仍然让您感到困惑,请查看(实际上,它与\u Why的Ruby教程一样好)
可能是一个
有很多方法可以读取Haskell类型的签名,但是如果你是新的,那么把最后一个箭头(->
)之前的所有类型都看作是“输入”,最后一个类型看作是“输出”。这个想法忽略了currying和一流函数,但它确实可以帮助你开始
因此,该函数需要一个可能是一个,并将为您提供一个IO()
那么什么是可能是?如果你不熟悉类型,你当然应该努力做到这一点。它是二阶类型。这意味着为了使用它,您需要给它一些其他类型来包含。也许还有其他类型的。因此,可能Int
保持和Int
,而可能String
保持一个字符串。但是这个函数被设计用来处理一个包含任何类型的或者(只要它有一个上面提到的Show实例)。请再次注意,小写字母a
如果此函数特别需要某种类型,它将使用以大写字母开头的类型
IO()
好吧,这可能是最难的部分。这个函数不是计算一些新的值,而是对现实世界做一些事情——haskell世界之外的所有事物都是现实世界。因此,用户输入和输出、网络内容和可变内存都必须放在IO类型中。(是的,这是第二顺序,就像可能)这是著名的和可爱的伊奥·莫纳德,我们希望你已经听说过,并将学会爱。当函数带有类型IO()
时,它意味着它做了一些事情,而不是返回一个值。在我们的例子中,我们认为它可能会显示和老化,对吗?。您需要在do
块中使用displayAge
,类似于main
函数*
*严格来说这不是真的,你可以用bind(>=
)来代替它,但这显然是一个初学者的问题,我们有一个关于不编写monad教程的规则,对吗?所以,这是一个类型声明,因此,它将告诉您需要为函数displayAge
提供什么,以使类型检查器满意。下面的几行实际上描述了函数的工作方式。类型声明是(几乎总是)可选的,但它们是重要的文档,并且经常使错误消息更有意义,因为编译器现在知道您想做什么,并且可以将其与您实际做的进行比较
显示一个
声明的第一部分,即=>
前面的一段,告诉我们一些关于a
的事情。我们注意到a
是小写,因此它不是一个类型,而是一个类型变量。当您实际使用displayAge
功能时,您可以使用您想要的任何类型来代替a
(Int、String、[Double]等),但这表示该类型必须有一个Show
实例。所以几乎任何类型的函数都不是。如果haskell中的类仍然让您感到困惑,请查看(实际上,它与\u Why的Ruby教程一样好)
可能是一个
有很多方法可以读取Haskell类型的签名,但是如果你是新的,那么把最后一个箭头(->
)之前的所有类型都看作是“输入”,最后一个类型看作是“输出”。这个想法忽略了currying和一流函数,但它确实可以帮助你开始
因此,该函数需要一个可能是一个,并将为您提供一个IO()
那么什么是可能是?如果你不熟悉类型,你当然应该努力做到这一点。它是二阶类型。这意味着为了使用它,您需要给它一些其他类型来包含。也许还有其他类型的。所以可能Int
保持和Int
,并且可能Stri