2014-11-17 3 views
5

कनवर्ट करें मैं एक आलसी ByteString को एक आलसी ByteString जेनरेट करने की कोशिश कर रहा हूं जो मेरे पास पहले से है।GHC.Int.Int64 को Int

तो मैं ByteString की लंबाई लेने के लिए और getEntropy में यह इतना तरह फ़ीड:

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) 

(L.fromChunks . (:[]) का उपयोग कर एक सख्त ByteString से एक आलसी एक में बदलने के लिए।)

समस्या यह है कि है SE.getEntropy प्रकार Int -> IO ByteString है जबकि L.lengthL.ByteString -> GHC.Int.Int64 प्रकार का है।

मैं Int64 को Int पर कैसे परिवर्तित कर सकता हूं?

+1

सबसे पहले, सुनिश्चित करें कि यह फिट होगा बनाते हैं! आर 64-बिट मशीन पर यह होगा; 32-बिट मशीन पर आपको कुछ शोध करने की आवश्यकता होगी। – dfeuer

उत्तर

9

आप fromIntegral का उपयोग कर एक और Num प्रकार में किसी भी Integral प्रकार कर सकते हैं:

fromInt64ToInt :: Int64 -> Int 
fromInt64ToInt = fromIntegral 
4

fromIntegral

GHCi में:

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

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