diff --git a/spago.lock b/spago.lock index 94ecd7a..1eee8cf 100644 --- a/spago.lock +++ b/spago.lock @@ -5,6 +5,7 @@ workspace: dependencies: - aff - aff-promise + - arrays - bifunctors - effect - either diff --git a/spago.yaml b/spago.yaml index c5fa7a5..4812048 100644 --- a/spago.yaml +++ b/spago.yaml @@ -5,6 +5,7 @@ package: dependencies: - aff - aff-promise + - arrays - bifunctors - effect - either diff --git a/src/Node.Worker.Serializable.purs b/src/Node.Worker.Serializable.purs index 234f803..7145cef 100644 --- a/src/Node.Worker.Serializable.purs +++ b/src/Node.Worker.Serializable.purs @@ -2,8 +2,10 @@ module Node.Worker.Serializable where import Prelude -import Control.Monad.Error.Class (throwError) +import Control.Monad.Error.Class (liftMaybe, throwError) import Control.Monad.Except (runExcept) +import Data.Array.NonEmpty (NonEmptyArray) +import Data.Array.NonEmpty as Array.NonEmpty import Data.Bifunctor (lmap) import Data.Either (Either(..)) import Data.Maybe (Maybe(..)) @@ -59,6 +61,10 @@ instance Serializable a => Serializable (Array a) where serialize a = unsafeToForeign a deserialize = flip bind (traverse deserialize) <<< lmap show <<< runExcept <<< readArray +instance Serializable a => Serializable (NonEmptyArray a) where + serialize a = unsafeToForeign $ Array.NonEmpty.toArray a + deserialize = flip bind (liftMaybe "expected non-empty array" <<< Array.NonEmpty.fromArray) <<< deserialize + instance Serializable a => Serializable (Object a) where serialize a = unsafeToForeign a deserialize a =