如果我要使用'((<-getLine',如何通过putStrLn检查输出值的类型签名?
numone <- getLine
(show (typeOf numone))
当我使用它时,它会检查并打印单词"numone"的类型签名,而不是通过getLine函数输入的内容。有解决办法吗?
此外;
如何比较两个输入字符串的某个部分?如果我输入A12345和A12335,我正在寻找"它们在开始时都包含A123"的输出。到目前为止,我正在使用if numone == numtwo
then
putStrLn $ "They are the same and their types are " ++ (show (typeOf numone)) ++ " and " ++ (show (typeOf numtwo))
else
putStrLn $ "They are not the same"
我之所以希望能够打印输入值的类型,是为了显示这些值是否相同,以及它们是否具有相同的类型。所以A123[String]与B123[String]不同,但正如我所知,这在我想要的情况下是不可能的。
您可以使用GHC API编译(包括类型检查(给定为String
的任意代码块。
您无法在程序中找到值的类型,因为Haskell是静态类型的。
相反,使用GHCi:
> ghci
Prelude> :t "Hello!"
"Hello!" :: [Char]
Prelude> :t 12.3
12.3 :: Fractional a => a
Prelude> :t Just (*)
Just (*) :: Num a => Maybe (a -> a -> a)