当我运行这个错误代码时...
data Person = Adult { pName :: String}
| Kid { pName :: String
, pAge :: Int
} deriving Show
getAge :: Person -> Int
getAge p = pAge p
getName :: Person -> String
getName p = pName p
main :: IO ()
main = do
let p1 = Kid "fred" 5
p2 = Adult "john"
ps = [p1, p2]
names = map getName ps
ages = map getAge ps
putStrLn $ "names: " ++ show names …Run Code Online (Sandbox Code Playgroud) 我想对一些文本进行url编码(例如,用%20替换每个空格等).我找到了"HTTP"Network.HTTP.Base.urlEncode并且可以使用它,但我想知道Yesod生态系统中是否还有其他通常使用的东西.
GHC Haskell似乎需要在小数点前面加一个数字才能读取Double.这是代码:
main :: IO ()
main = do
let d1 = read "0.3" :: Double
d2 = read ".3" :: Double
print d1
print d2
Run Code Online (Sandbox Code Playgroud)
运行它会产生:
0.3
*** Exception: Prelude.read: no parse
Run Code Online (Sandbox Code Playgroud)
这是一个GHC错误还是一个主要限制?
(我尝试使用C,Javascript和MS Excel阅读".3",所有这些都可以成功解析".3"并将其理解为一个数字.我想我在我的其他方面看到了这个问题的影响程序,包括使用parseargs包读取命令行参数,并使用Yesod的MForms以html形式读取双打.)
是否有针对此问题的已知修复或解决方法?
这个c ++程序
#include <cstdio>
int main(void)
{
double x = 1.0;
printf("%g\n", x);
double y = 1.25;
printf("%g\n", y);
}
Run Code Online (Sandbox Code Playgroud)
似乎根据我对 fprint"%g"的理解正确执行,因为它产生以下输出:
1
1.25
Run Code Online (Sandbox Code Playgroud)
但是,这个Haskell程序的输出
import Numeric (showGFloat)
import Text.Printf (printf)
main :: IO ()
main = do
let x = 1.0 :: Double
putStrLn $ printf "%g" x
putStrLn $ showGFloat Nothing x ""
let y = 1.25 :: Double
putStrLn $ printf "%g" y
putStrLn $ showGFloat Nothing y ""
Run Code Online (Sandbox Code Playgroud)
是
1.0
1.0
1.25
1.25 …Run Code Online (Sandbox Code Playgroud) 我正在寻找使用Streams在Java中使用Haskell的"或"函数.
给定无限流时,此版本不会返回:
public static Boolean or(Stream<Boolean> bs) {
return bs.reduce(false, (x, y) -> x || y);
}
Run Code Online (Sandbox Code Playgroud)
此版本无法运行,因为bs流使用了两次:
public static Boolean or(Stream<Boolean> bs) {
Optional<Boolean> b0 = bs.findFirst();
if (b0.isPresent()) {
return b0.get() || or(bs.skip(1));
} else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我是Java的新手,所以任何提示都会非常感激.谢谢.