From 17fea6f7c5bc8bbde3f9dfbe88e94742cad15e92 Mon Sep 17 00:00:00 2001 From: Daniel Casanueva Date: Fri, 10 Jan 2025 11:24:41 +0100 Subject: [PATCH 1/3] Add trivial instances for () and Void --- src/Web/Internal/FormUrlEncoded.hs | 6 ++++++ stack.yaml | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Web/Internal/FormUrlEncoded.hs b/src/Web/Internal/FormUrlEncoded.hs index 08d125a..134f77e 100644 --- a/src/Web/Internal/FormUrlEncoded.hs +++ b/src/Web/Internal/FormUrlEncoded.hs @@ -267,6 +267,10 @@ class ToForm a where instance ToForm Form where toForm = id +instance ToForm Void where toForm _ = Form HashMap.empty + +instance ToForm () where toForm _ = Form HashMap.empty + instance (ToFormKey k, ToHttpApiData v) => ToForm [(k, v)] where toForm = fromList . map (toFormKey *** toQueryParam) @@ -413,6 +417,8 @@ class FromForm a where instance FromForm Form where fromForm = pure +instance FromForm () where fromForm _ = Right () + -- | _NOTE:_ this conversion is unstable and may result in different key order (but not values). instance (FromFormKey k, FromHttpApiData v) => FromForm [(k, v)] where fromForm = fmap (concatMap (\(k, vs) -> map ((,) k) vs)) . toEntriesByKey diff --git a/stack.yaml b/stack.yaml index aa9b6e2..ae7f1fa 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1,4 +1,4 @@ -resolver: lts-12.10 +resolver: lts-23.3 packages: - '.' flags: From b7e4ce9b33b19ccf9fa00a9693461a5dd170788c Mon Sep 17 00:00:00 2001 From: Daniel Casanueva Date: Fri, 10 Jan 2025 12:06:08 +0100 Subject: [PATCH 2/3] Use absurd in ToForm Void instance --- src/Web/Internal/FormUrlEncoded.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Web/Internal/FormUrlEncoded.hs b/src/Web/Internal/FormUrlEncoded.hs index 134f77e..ac4586f 100644 --- a/src/Web/Internal/FormUrlEncoded.hs +++ b/src/Web/Internal/FormUrlEncoded.hs @@ -49,7 +49,7 @@ import Data.Time.Compat (Day, LocalTime, NominalDiffTime, UTCTime, ZonedTime) import Data.Time.Calendar.Month.Compat (Month) import Data.Time.Calendar.Quarter.Compat (Quarter, QuarterOfYear (..)) -import Data.Void (Void) +import Data.Void (Void, absurd) import Data.Word (Word16, Word32, Word64, Word8) import GHC.Exts (Constraint, IsList (..)) import GHC.Generics @@ -267,7 +267,7 @@ class ToForm a where instance ToForm Form where toForm = id -instance ToForm Void where toForm _ = Form HashMap.empty +instance ToForm Void where toForm = absurd instance ToForm () where toForm _ = Form HashMap.empty From 14a5f5385fe2152e9a191c4aa1882cf44a9234a8 Mon Sep 17 00:00:00 2001 From: Daniel Casanueva Date: Fri, 10 Jan 2025 12:08:57 +0100 Subject: [PATCH 3/3] Add FromForm Void instance --- src/Web/Internal/FormUrlEncoded.hs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Web/Internal/FormUrlEncoded.hs b/src/Web/Internal/FormUrlEncoded.hs index ac4586f..64573fb 100644 --- a/src/Web/Internal/FormUrlEncoded.hs +++ b/src/Web/Internal/FormUrlEncoded.hs @@ -417,6 +417,8 @@ class FromForm a where instance FromForm Form where fromForm = pure +instance FromForm Void where fromForm _ = Left "fromForm: Void" + instance FromForm () where fromForm _ = Right () -- | _NOTE:_ this conversion is unstable and may result in different key order (but not values).