我正在使用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代码中,如何强制主线程等待所有子线程完成.
我无法使用此链接中的"终止程序"部分中给出的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) 在以下程序中,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中生成一个随机数列表.
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)