2014-11-17 24 views
5

Ben zaten sahip bir tembel ByteString aynı uzunlukta rasgele tembel ByteString oluşturmak çalışıyorum.Dönüştürme GHC.Int.Int64 için Int

Yani ByteString uzunluğunu alıp şöyle getEntropy içine yem:

import qualified Data.ByteString.Lazy.Char8 as L 
import qualified System.Entropy as SE 

string :: L.ByteString 
string = L.pack "Hello world!" 

randomString :: IO L.ByteString 
randomString = L.fromChunks . (:[]) <$> SE.getEntropy (L.length string) 

(tembel birine sıkı ByteString dönüştürmek için L.fromChunks . (:[]) kullanarak.)

sorun olduğunu SE.getEntropy, Int -> IO ByteString türünde iken L.length, L.ByteString -> GHC.Int.Int64 türünde.

'u Int'a nasıl dönüştürebilirim?

+1

Birincisi, uyacak emin olun! Ar 64-bit makinede olacak; 32-bit bir makinede biraz araştırma yapmanız gerekecek. – dfeuer

cevap

9

Sen fromIntegral kullanarak başka Num türü içine herhangi Integral türü açabilirsiniz: GHCi yılında

fromInt64ToInt :: Int64 -> Int 
fromInt64ToInt = fromIntegral 
4

fromIntegral

:

let a = 6 :: GHC.Int.Int64 
let f :: Int -> Int; f x = x; 

--this will error 
f a 
--this succeeds 
f (fromIntegral a)