小编Amm*_*osh的帖子

无法生成Num的派生实例

我正在使用ghci此代码部分

newtype Gold = Gold Int
    deriving (Eq, Ord, Show, Num)
Run Code Online (Sandbox Code Playgroud)

显示错误为

Can't make a derived instance of 'Num Gold':
  'Num' is not a derivable class
  Try GeneralizedNewTypeDeriving for GHC's newtype-deriving extension in the newtype declaration for 'Gold'
Run Code Online (Sandbox Code Playgroud)

请建议解决方案.

haskell ghci derived-instances newtype

13
推荐指数
1
解决办法
2906
查看次数

如何强制主线程等待其所有子线程在Haskell中完成

在下面的Haskell代码中,如何强制主线程等待所有子线程完成.

我无法使用此链接中的"终止程序"部分中给出的forkFinally:(http://hackage.haskell.org/package/base-4.7.0.2/docs/Control-Concurrent.html).

使用TMVar时,我得到了理想的结果.但是我想和TVar一起做这件事.请帮忙.

module Main
where
import Control.Monad
import Control.Concurrent
import Control.Concurrent.STM

type TInt = TVar Int

transTest :: TInt -> Int -> IO ()
transTest n t = do 
    atomically $ do 
        t1 <- readTVar n                    
        doSomeJob t
        t2 <- readTVar n
        writeTVar n t

doSomeJob :: Int -> STM ()
doSomeJob t = do
    x <- newTVar 0
    let l = 10^6*t
    forM_ [1..l] (\i -> do 
        writeTVar x i )            

main :: IO ()
main …
Run Code Online (Sandbox Code Playgroud)

multithreading haskell

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

Haskell STM:如何根据执行顺序存储ThreadID

在以下程序中,Fibonacci数是从给定的整数(随机生成)生成的,并且该值存储在TVar中.由于生成Fibonacci的执行时间因不同的数量而不同,因此线程不会按顺序运行.我想存储theadID,可能在列表中,检查它们的执行模式. 请帮我.提前致谢.

module Main
where
import Control.Parallel
import Control.Concurrent.STM
import Control.Concurrent
import System.Random 
import Control.Monad
import Data.IORef
import System.IO

nfib :: Int -> Int
nfib n | n <= 2 = 1
   | otherwise = par n1 (pseq n2 (n1 + n2 ))
                 where n1 = nfib (n-1)
                       n2 = nfib (n-2)


type TInt = TVar Int


updateNum :: TInt -> Int -> STM()
updateNum n v = do x1 <- readTVar n
                   let y = nfib v
                   x2 …
Run Code Online (Sandbox Code Playgroud)

haskell stm

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

如何在Haskell中生成随机数列表

我想在Haskell中生成一个随机数列表.

Step 1 : declare an empty Int List 
Step 2 : Generate a random number between 1 to 50
Step 3 : Add that number at the end of the List.
Step 4 : Repeat Step 2 and 3 for 5 times.
Run Code Online (Sandbox Code Playgroud)

我用Array编写了代码.

import System.Random 
import Data.Array.IO
main =  do 
     arr <- newArray (1,5) 0 :: IO (IOArray Int Int)

     forM_ [1..5] (\i -> do
        v <- getStdRandom(randomR (1,50))
        writeArray arr i v)

     forM_ [1..5] (\i -> do 
        a …
Run Code Online (Sandbox Code Playgroud)

haskell ghci

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

标签 统计

haskell ×4

ghci ×2

derived-instances ×1

multithreading ×1

newtype ×1

stm ×1