From a28f6abe5deef36c66f2639b114f57da33168167 Mon Sep 17 00:00:00 2001 From: VegOwOtenks Date: Sat, 23 Aug 2025 18:39:46 +0200 Subject: [PATCH] feat: strict inDatatypeOf --- src/Pretty/Serialize.hs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Pretty/Serialize.hs b/src/Pretty/Serialize.hs index 95e1c16..f98fd04 100644 --- a/src/Pretty/Serialize.hs +++ b/src/Pretty/Serialize.hs @@ -14,6 +14,7 @@ {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE DerivingVia #-} {-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE BangPatterns #-} module Pretty.Serialize (Serializer, PrettySerialize(..), ShowPrettySerialize(..), run, emit, KeyValueSerialize(..), customField) where import Data.Text.Lazy.Builder (Builder) @@ -85,7 +86,6 @@ modifySerializerState f = getSerializerState >>= setSerializerState . f -- | Append a text to the serializer buffer. Does not check whether the emitted text contains a newline. - emit :: Text -> Serializer () emit t = Serializer $ \ state -> (state { builder = state.builder <> Builder.fromLazyText t }, ()) @@ -158,7 +158,9 @@ inDatatype name body = do body inDatatypeOf :: Typeable a => a -> Serializer b -> Serializer b -inDatatypeOf = inDatatype . Text.pack . show . typeOf +inDatatypeOf x s = let + !typeName = Text.pack . show . typeOf $ x + in inDatatype typeName s run :: Serializer () -> Text run (Serializer computeUnit) = Builder.toLazyText . builder . fst . computeUnit $ SerializerState {builder=mempty, indentation=0, increaseIndentation=(+4), currentFieldIndex=Nothing}