diff --git a/bower.json b/bower.json index c76326e..244f026 100644 --- a/bower.json +++ b/bower.json @@ -22,7 +22,8 @@ "purescript-ordered-collections": "^1.0.0", "purescript-proxy": "^3.0.0", "purescript-exceptions": "^4.0.0", - "purescript-record": "^1.0.0" + "purescript-record": "^1.0.0", + "purescript-identity": "^4.1.0" }, "devDependencies": { "purescript-assert": "^4.0.0", diff --git a/src/Foreign/Class.purs b/src/Foreign/Class.purs index b95abb0..be5758f 100644 --- a/src/Foreign/Class.purs +++ b/src/Foreign/Class.purs @@ -6,7 +6,9 @@ import Control.Monad.Except (except, mapExcept) import Data.Array ((..), zipWith, length) import Data.Bifunctor (lmap) import Data.Either (Either(..)) +import Data.Identity (Identity(..)) import Data.Maybe (Maybe, maybe) +import Data.Newtype (unwrap) import Data.Traversable (sequence) import Foreign (F, Foreign, ForeignError(..), readArray, readBoolean, readChar, readInt, readNumber, readString, unsafeToForeign) import Foreign.Internal (readObject) @@ -56,6 +58,9 @@ instance numberDecode :: Decode Number where instance intDecode :: Decode Int where decode = readInt +instance identityDecode :: Decode a => Decode (Identity a) where + decode = map Identity <<< decode + instance arrayDecode :: Decode a => Decode (Array a) where decode = readArray >=> readElements where readElements :: Array Foreign -> F (Array a) @@ -112,6 +117,9 @@ instance numberEncode :: Encode Number where instance intEncode :: Encode Int where encode = unsafeToForeign +instance identityEncode :: Encode a => Encode (Identity a) where + encode = encode <<< unwrap + instance arrayEncode :: Encode a => Encode (Array a) where encode = unsafeToForeign <<< map encode