- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望能够使用 MWC random number generator与 random-fu,因此需要实现 MonadRandom
的实例。我的尝试是将 Reader (Gen (PrimState m)) v
视为 MonadRandom v
。但是,以下失败:
$(monadRandom [d|
instance (PrimMonad m) => MonadRandom (Reader (MWC.Gen (PrimState m))) where
getRandomWord16 = ask >>= MWC.uniform
getRandomWord32 = ask >>= MWC.uniform
getRandomWord64 = ask >>= MWC.uniform
|])
错误:
Illegal type synonym family application in instance:
Reader (MWC.Gen (PrimState m_ahwD))
In the instance declaration for
‘MonadRandom (Reader (MWC.Gen (PrimState m_ahwD)))’
我做错了什么?
最佳答案
基于其他贡献者已经说过的话
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE FlexibleInstances #-}
import Data.Random
import Data.Random.Source
import qualified System.Random.MWC as MWC
import Control.Monad.Reader
import Control.Monad.Primitive
$(monadRandom [d|
instance (PrimMonad m, s ~ PrimState m) => MonadRandom (ReaderT (MWC.Gen s) m) where
getRandomWord16 = ask >>= lift . MWC.uniform
getRandomWord32 = ask >>= lift . MWC.uniform
getRandomWord64 = ask >>= lift . MWC.uniform
|])
testUniform :: MonadRandom m => Int -> m [Double]
testUniform n = replicateM (fromIntegral n) (sample stdUniform)
n :: Int
n = 10^7
main :: IO ()
main = do
seed <- MWC.create
xs <- runReaderT (testUniform n) seed
print (sum xs / fromIntegral n)
但是效果不是很好
./RandomFuMWC +RTS -s
0.5000432391067587
3,286,220,896 bytes allocated in the heap
2,427,475,880 bytes copied during GC
600,186,048 bytes maximum residency (12 sample(s))
100,510,656 bytes maximum slop
1249 MB total memory in use (0 MB lost due to fragmentation)
Tot time (elapsed) Avg pause Max pause
Gen 0 5942 colls, 0 par 1.06s 1.13s 0.0002s 0.0013s
Gen 1 12 colls, 0 par 0.82s 1.23s 0.1024s 0.5787s
INIT time 0.00s ( 0.00s elapsed)
MUT time 1.47s ( 1.39s elapsed)
GC time 1.87s ( 2.36s elapsed)
EXIT time 0.01s ( 0.09s elapsed)
Total time 3.35s ( 3.84s elapsed)
%GC time 56.0% (61.3% elapsed)
Alloc rate 2,242,365,923 bytes per MUT second
Productivity 44.0% of total user, 38.3% of total elapsed
关于haskell - 为 MWC (Haskell) 编写一个 MonadRandom 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25886434/
有人可以提供如何使用“MonadRandom”的“傻瓜”示例吗? 目前我有一些代码可以做一些事情,比如传递生成器变量,从主函数一直到: main = do g <- getStdGen
似乎来自 random-fu 包的 MonadRandom 不是 Functor,因为我收到如下错误: Could not deduce (Functor m) arising from a use
现在我正在使用 MonadRandom 库。我有一个计算: metroChain :: (RandomGen g) => Rand g Double 我想执行多次,然后依次打印出结果。或者更确切地说,
我正在编写一些使用 State 的代码(围绕纸牌策略)和递归在一起。也许这部分实际上并不需要(即使作为一个相对的初学者,它对我来说已经感觉很笨拙),但是还有其他部分可能会这样做,所以我的一般问题是..
我想用给定的均值和标准差对正态分布进行采样。我知道如何在 Data.Random.Rvar 或 Data.Random.MonadRandom 等各种上下文中做到这一点。 但是,我的函数的上下文是 C
下面的简单代码 import Control.Monad import Control.Monad.Random psum :: (MonadRandom r) => Int -> r Double
我希望能够使用 MWC random number generator与 random-fu,因此需要实现 MonadRandom 的实例。我的尝试是将 Reader (Gen (PrimState
我正在尝试使用 https://hackage.haskell.org/package/random-fu-0.2.6.0/docs/Data-Random.html#g:6 中的 MonadRand
class (Eq e, GenExpr e, MonadRandom m) => GenProg m e | e -> m where 确切地说,我无法理解这个GenProg m e | e ->
我是一名优秀的程序员,十分优秀!