From 7e1db620d450439ef584c1b5d6c7740323893640 Mon Sep 17 00:00:00 2001 From: Nathan Faubion Date: Thu, 8 Dec 2022 12:59:42 -0800 Subject: [PATCH 1/2] Use null for mempty ReactElement --- packages.dhall | 3 ++- src/React.js | 8 ++++++++ src/React.purs | 15 ++++++++++++--- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/packages.dhall b/packages.dhall index 582d6d3..bc9c4ee 100644 --- a/packages.dhall +++ b/packages.dhall @@ -1,4 +1,5 @@ let upstream = - https://raw.githubusercontent.com/purescript/package-sets/prepare-0.15/src/packages.dhall + https://github.com/purescript/package-sets/releases/download/psc-0.15.4-20221208/packages.dhall + sha256:e3549e48d0170e14838d8f0c44172253947dcb6117b51a763f33dca34f00ba43 in upstream diff --git a/src/React.js b/src/React.js index 8a20927..ea3bced 100644 --- a/src/React.js +++ b/src/React.js @@ -153,3 +153,11 @@ function createContext(defaultValue) { }; } export {createContext}; + +export var emptyReactElement = null; + +function isEmptyReactElement(a) { + return a === emptyReactElement; +}; + +export {isEmptyReactElement}; diff --git a/src/React.purs b/src/React.purs index e590767..269e2e3 100644 --- a/src/React.purs +++ b/src/React.purs @@ -81,11 +81,18 @@ type TagName = String -- | A virtual DOM node, or component. foreign import data ReactElement :: Type +foreign import emptyReactElement :: ReactElement + +foreign import isEmptyReactElement :: ReactElement -> Boolean + instance semigroupReactElement :: Semigroup ReactElement where - append a b = toElement [ a, b ] + append a b + | isEmptyReactElement a = b + | isEmptyReactElement b = a + | otherwise = toElement [ a, b ] instance monoidReactElement :: Monoid ReactElement where - mempty = toElement ([] :: Array ReactElement) + mempty = emptyReactElement -- | A mounted react component foreign import data ReactComponent :: Type @@ -493,7 +500,9 @@ instance isReactElementReactElement :: IsReactElement ReactElement where toElement = identity instance isReactElementArray :: IsReactElement (Array ReactElement) where - toElement = createElement fragment {} + toElement = case _ of + [] -> mempty + children -> createElement fragment {} children -- | Creates a keyed fragment. fragmentWithKey :: String -> Array ReactElement -> ReactElement From a1f8758d065f3520c202e1f03d8e1146b231c01b Mon Sep 17 00:00:00 2001 From: Nathan Faubion Date: Wed, 4 Jan 2023 10:00:08 -0800 Subject: [PATCH 2/2] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0368b5b..c3b1b81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ Notable changes to this project are documented in this file. The format is based ## [Unreleased] Breaking changes: +- Update the Monoid/Semigroup instance of `ReactElement` to use `null` for `mempty` instead of an empty fragment. (#187) New features: