小编Ran*_*ude的帖子

Haskell 中 (^) 的奇怪行为

为什么 GHCi 在下面给出了错误的答案?

温室气体

?> ((-20.24373193905347)^12)^2 - ((-20.24373193905347)^24)
4.503599627370496e15
Run Code Online (Sandbox Code Playgroud)

蟒蛇3

>>> ((-20.24373193905347)**12)**2 - ((-20.24373193905347)**24)
0.0
Run Code Online (Sandbox Code Playgroud)

更新 我将按如下方式实现 Haskell 的 (^) 函数。

powerXY :: Double -> Int -> Double
powerXY x 0 = 1
powerXY x y
    | y < 0 = powerXY (1/x) (-y)
    | otherwise = 
        let z = powerXY x (y `div` 2)
        in  if odd y then z*z*x else z*z

main = do 
    let x = -20.24373193905347
    print $ powerXY (powerXY x 12) 2 - powerXY x …
Run Code Online (Sandbox Code Playgroud)

floating-point haskell ghc ghci

12
推荐指数
1
解决办法
334
查看次数

Haskell 计算密集型线程阻塞所有其他线程

我想编写一个程序,它的主线程派生一个新线程进行计算并等待它完成一段时间。如果子线程没有在给定时间内完成,它就会超时并被杀死。我有以下代码。

import Control.Concurrent

fibs :: Int -> Int 
fibs 0 = 0
fibs 1 = 1
fibs n = fibs (n-1) + fibs (n-2)

main = do 
    mvar  <- newEmptyMVar 
    tid   <- forkIO $ do
        threadDelay (1 * 1000 * 1000)
        putMVar mvar Nothing 
    tid'  <- forkIO $ do
        if fibs 1234 == 100
            then putStrLn "Incorrect answer" >> putMVar mvar (Just False)
            else putStrLn "Maybe correct answer" >> putMVar mvar (Just True)
    putStrLn "Waiting for result or timeout"
    result …
Run Code Online (Sandbox Code Playgroud)

concurrency multithreading haskell timeout blocking

8
推荐指数
1
解决办法
159
查看次数

如何构建 Haskell 应用程序?

我对简单(单焦点)Haskell 程序有一些经验,但现在我正在尝试用 Haskell 编写更大的应用程序。我在构建应用程序时遇到问题。

比方说,我们有三个模块(概念)的应用程序- MainLogicAppIOMain在启动程序和使用功能LogicAppIO做的工作。Logic抽象应用程序逻辑,我们需要它的多个实现。使用哪种Logic实现Main由用户配置决定。AppIO用于与外界对话的函数。

我的Main模块有一个newtype App = App { unapp :: ReaderT r (ExceptT e m) a }monad 转换器。同样,LogicAppIO拥有自己的 monad 变压器堆栈。我正在考虑在基础上创建一个App带有LogicAppIO转换器的monad 转换器。

在这一点上,我有一些问题。

  1. 这是构建具有多个 monadic 模块的 Haskell 应用程序的正确方法吗?
  2. 应该Logic并且AppIO拥有自己的 monad 变压器堆栈还是应该App在他们的类型签名中拥有?我不喜欢App使用模块类型,因为我认为模块应该相互不可知。Logic如果我不让它本身成为变压器,我将如何给出自己的状态?
  3. 如果Logic并且在他们的转换器堆栈中AppIO …

haskell

6
推荐指数
0
解决办法
146
查看次数

Purescript 中的 getElementById

我对 Purescript 很陌生,所以这可能是一个天真的问题。

我想编写一个 Purescript 函数,该函数从浏览器上的 HTML 输入元素读取输入并将一些输出写入另一个 HTML 输入元素。

使用普通的 Javascript,它就像document.getElementById('output').value = myFun(document.getElementById('input'));. 我如何只用 Purescript 做到这一点?

purescript

3
推荐指数
1
解决办法
353
查看次数