This commit is contained in:
Dmitry Zuykov 2025-04-30 13:39:08 +03:00
parent fcae600b7c
commit 416ab20a96
1 changed files with 50 additions and 0 deletions

View File

@ -32,6 +32,7 @@ import Data.ByteString.Lazy qualified as LBS
import Data.ByteString.Lazy.Char8 qualified as LBS8 import Data.ByteString.Lazy.Char8 qualified as LBS8
import Data.Data import Data.Data
import Data.Coerce import Data.Coerce
import Data.Fixed
import Data.Foldable import Data.Foldable
import Data.Function as Export import Data.Function as Export
import Data.Functor as Export import Data.Functor as Export
@ -1428,6 +1429,55 @@ internalEntries = do
entry $ bindAlias "%" "mod" entry $ bindAlias "%" "mod"
entry $ bindMatch "floor" $ \case
[LitScientificVal x] ->
pure $ mkDouble (realToFrac $ floor x)
_ -> throwIO (BadFormException @c nil)
entry $ bindMatch "ceiling" $ \case
[LitScientificVal x] ->
pure $ mkDouble (realToFrac $ ceiling x)
_ -> throwIO (BadFormException @c nil)
entry $ bindMatch "fixed" $ \case
[LitIntVal 1, LitScientificVal x] -> do
pure $ mkSym $ show (realToFrac $ realToFrac @_ @(Fixed E1) x)
[LitIntVal 2, LitScientificVal x] -> do
pure $ mkSym $ show (realToFrac $ realToFrac @_ @(Fixed E2) x)
[LitIntVal 3, LitScientificVal x] -> do
pure $ mkSym $ show $ (realToFrac $ realToFrac @_ @(Fixed E3) x)
[LitIntVal 6, LitScientificVal x] -> do
pure $ mkSym $ show (realToFrac $ realToFrac @_ @(Fixed E6) x)
[LitIntVal 9, LitScientificVal x] -> do
pure $ mkSym $ show (realToFrac $ realToFrac @_ @(Fixed E9) x)
[LitIntVal 12, LitScientificVal x] -> do
pure $ mkSym $ show (realToFrac $ realToFrac @_ @(Fixed E12) x)
[LitIntVal _, LitScientificVal x] -> do
pure $ mkDouble x
_ -> throwIO (BadFormException @c nil)
entry $ bindMatch "round" $ \case
[LitScientificVal x] -> do
pure $ mkDouble (realToFrac $ floor x)
[LitIntVal n, LitScientificVal x] -> do
let factor = 10 ^ n
rounded = fromIntegral (round (x * fromIntegral factor)) / fromIntegral factor
pure (mkDouble rounded)
_ -> throwIO (BadFormException @c nil)
entry $ bindMatch "sum" $ \x -> do entry $ bindMatch "sum" $ \x -> do
ds <- case x of ds <- case x of
[ ListVal es ] -> pure es [ ListVal es ] -> pure es