返回给定特定整数输入的字符串

Dav*_*ick 1 haskell functional-programming ghc

我正在尝试学习Haskell,在尝试编写一个简单的函数时遇到了一个问题.使用以下代码:

squarenumber x = if x<10
                then x^2
                else return "Input is too large, please input a value less than 10."
Run Code Online (Sandbox Code Playgroud)

问题似乎与else功能的一部分有关.如何修改此函数,以便在输入大于10时返回一个字符串?

Sib*_*ibi 8

你无法做你想做的事.在Haskell中,表达式应该具有相同的类型.它不应该Integer在某些情况下和String某些其他情况下.但是您可以使用Either数据类型获得您想要的内容:

squarenumber :: (Ord a, Num a) => a -> Either String a
squarenumber x = if x < 10
                 then Right (x^2)
                 else Left $ "Input is too large, please input a value less than 10."
Run Code Online (Sandbox Code Playgroud)

你也混淆了Haskell的return命令式语言.请注意,在Haskell中return有一个完全不同的含义.它是Monad类型类的方法之一.