类型"Show a => Maybe a - > IO()"是什么意思?

dan*_*131 1 haskell types

我有一个代码片段,如下所示

displayAge :: Show a => Maybe a -> IO ()
displayAge maybeAge =
  case maybeAge of
    Nothing -> putStrLn "Invalid year"
    Just maybeAge -> putStrLn $ show maybeAge
Run Code Online (Sandbox Code Playgroud)

该函数从控制台获取其参数,并通过readMay函数传递给它,如下所示;

main = do
  putStrLn "Your birth year"
  strYear <- getLine
  let maybeAge = do
        intYear <- readMay strYear
        return (processYear intYear)
  displayAge maybeAge
Run Code Online (Sandbox Code Playgroud)

你能解释一下这个displayAge函数的类型声明吗?为什么Show a用?

lef*_*out 5

displayAge获取Maybe类型的值a,其中a任何类型都可以是Shown.

首先阅读=>Haskell签名右侧的内容通常很有用,即Maybe a -> IO ()