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: pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy