小编Tad*_*Tad的帖子

为什么GHC没有为"记录选择器中的不匹配"例外提供编译时警告?

当我运行这个错误代码时...

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)

haskell ghc

11
推荐指数
1
解决办法
2485
查看次数

在Yesod生态系统中,对某些文本进行urlencode的最佳方法是什么?

我想对一些文本进行url编码(例如,用%20替换每个空格等).我找到了"HTTP"Network.HTTP.Base.urlEncode并且可以使用它,但我想知道Yesod生态系统中是否还有其他通常使用的东西.

haskell urlencode yesod

6
推荐指数
1
解决办法
717
查看次数

哈斯克尔不能读这个双:".3".这是一个错误吗?

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形式读取双打.)

是否有针对此问题的已知修复或解决方法?

double parsing haskell

4
推荐指数
1
解决办法
306
查看次数

这是Haskell的printf"%g"中的错误吗?

这个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)

printf haskell

2
推荐指数
1
解决办法
212
查看次数

使用Java中的Streams实现等效的Haskell"或"函数的好方法是什么

我正在寻找使用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的新手,所以任何提示都会非常感激.谢谢.

java haskell stream

2
推荐指数
1
解决办法
138
查看次数

标签 统计

haskell ×5

double ×1

ghc ×1

java ×1

parsing ×1

printf ×1

stream ×1

urlencode ×1

yesod ×1