Movatterモバイル変換


[0]ホーム

URL:


modulePostgreSQL.Binary.NumericwhereimportPostgreSQL.Binary.PreludeimportqualifiedData.VectorasVectorimportqualifiedData.ScientificasScientific{-# INLINE posSignCode #-}posSignCode::Word16posSignCode=0x0000{-# INLINE negSignCode #-}negSignCode::Word16negSignCode=0x4000{-# INLINE nanSignCode #-}nanSignCode::Word16nanSignCode=0xC000{-# INLINE extractComponents #-}extractComponents::Integrala=>a->[Int16]extractComponents=(reverse.).(.abs).unfoldr$\case0->Nothingx->casedivModx10000of(d,m)->Just(fromIntegralm,d){-# INLINE mergeComponents #-}mergeComponents::Integrala=>Vectora->IntegermergeComponents=Vector.foldl'(\lr->l*10000+fromIntegralr)0{-# INLINE mergeDigits #-}mergeDigits::Integrala=>Vectora->amergeDigits=Vector.foldl'(\lr->l*10+r)0-- |-- Unpack a component into digits.{-# INLINE componentDigits #-}componentDigits::Int16->[Int16]componentDigits=evalState$doa<-state(flipdivMod1000)b<-state(flipdivMod100)c<-state(flipdivMod10)d<-getreturn$[a,b,c,d]{-# INLINABLE componentsReplicateM #-}componentsReplicateM::(Integrala,Applicativem)=>Int->ma->macomponentsReplicateMamountcomponent=foldl'folder(pure0)(replicateamountcomponent)wherefolderacccomponent=liftA2(+)(fmap(*10000)acc)component{-# INLINE signer #-}signer::Integrala=>Word16->EitherText(a->a)signer=\case0x0000->returnid0x4000->returnnegate0xC000->Left"NAN sign"signCode->Left("Unexpected sign code: "<>(fromString.show)signCode){-# INLINE scientific #-}scientific::Int16->Word16->VectorWord16->EitherTextScientificscientificpointIndexsignCodecomponents=dotheSigner<-signersignCodereturn(Scientific.scientific(ctheSigner)e)wherecsigner=signer(mergeComponentscomponents)e=(fromIntegralpointIndex+1-Vector.lengthcomponents)*4

[8]ページ先頭

©2009-2025 Movatter.jp