From 027cb2fc8be1c19238732a127e38168659bf143b Mon Sep 17 00:00:00 2001 From: kritzcreek Date: Sun, 28 Jan 2018 21:23:06 +0100 Subject: [PATCH 1/6] update for purescript-effect --- bower.json | 2 +- src/Control/Monad/Eff/Ref.purs | 15 ++++++--------- src/Control/Monad/Eff/Ref/Unsafe.purs | 16 ---------------- 3 files changed, 7 insertions(+), 26 deletions(-) delete mode 100644 src/Control/Monad/Eff/Ref/Unsafe.purs diff --git a/bower.json b/bower.json index a4b8090..9a99580 100644 --- a/bower.json +++ b/bower.json @@ -17,6 +17,6 @@ "package.json" ], "dependencies": { - "purescript-eff": "^3.0.0" + "purescript-effect": "^0.1.0" } } diff --git a/src/Control/Monad/Eff/Ref.purs b/src/Control/Monad/Eff/Ref.purs index 09a4ae6..893465b 100644 --- a/src/Control/Monad/Eff/Ref.purs +++ b/src/Control/Monad/Eff/Ref.purs @@ -6,30 +6,27 @@ -- | local scope. module Control.Monad.Eff.Ref where +import Control.Monad.Effect (Effect) import Prelude (Unit, unit) -import Control.Monad.Eff (Eff, kind Effect) - --- | The effect associated with the use of global mutable variables. -foreign import data REF :: Effect -- | A value of type `Ref a` represents a mutable reference -- | which holds a value of type `a`. foreign import data Ref :: Type -> Type -- | Create a new mutable reference containing the specified value. -foreign import newRef :: forall s r. s -> Eff (ref :: REF | r) (Ref s) +foreign import newRef :: forall s r. s -> Effect (Ref s) -- | Read the current value of a mutable reference -foreign import readRef :: forall s r. Ref s -> Eff (ref :: REF | r) s +foreign import readRef :: forall s r. Ref s -> Effect s -- | Update the value of a mutable reference by applying a function -- | to the current value. -foreign import modifyRef' :: forall s b r. Ref s -> (s -> { state :: s, value :: b }) -> Eff (ref :: REF | r) b +foreign import modifyRef' :: forall s b r. Ref s -> (s -> { state :: s, value :: b }) -> Effect b -- | Update the value of a mutable reference by applying a function -- | to the current value. -modifyRef :: forall s r. Ref s -> (s -> s) -> Eff (ref :: REF | r) Unit +modifyRef :: forall s r. Ref s -> (s -> s) -> Effect Unit modifyRef ref f = modifyRef' ref (\s -> { state: f s, value: unit }) -- | Update the value of a mutable reference to the specified value. -foreign import writeRef :: forall s r. Ref s -> s -> Eff (ref :: REF | r) Unit +foreign import writeRef :: forall s r. Ref s -> s -> Effect Unit diff --git a/src/Control/Monad/Eff/Ref/Unsafe.purs b/src/Control/Monad/Eff/Ref/Unsafe.purs deleted file mode 100644 index fec0c3d..0000000 --- a/src/Control/Monad/Eff/Ref/Unsafe.purs +++ /dev/null @@ -1,16 +0,0 @@ --- | Unsafe functions for working with mutable references. - -module Control.Monad.Eff.Ref.Unsafe where - -import Control.Monad.Eff (Eff) -import Control.Monad.Eff.Ref (REF) -import Control.Monad.Eff.Unsafe (unsafeCoerceEff) - --- | This handler function unsafely removes the `Ref` effect from an --- | effectful action. --- | --- | This function might be used when it is impossible to prove to the --- | typechecker that a particular mutable reference does not escape --- | its scope. -unsafeRunRef :: forall eff a. Eff (ref :: REF | eff) a -> Eff eff a -unsafeRunRef = unsafeCoerceEff From 6928161b60cfc1827030c19694189f917ae4c9ca Mon Sep 17 00:00:00 2001 From: kritzcreek Date: Sun, 28 Jan 2018 21:32:35 +0100 Subject: [PATCH 2/6] Eff -> Effect --- src/Control/Monad/{Eff => Effect}/Ref.js | 0 src/Control/Monad/{Eff => Effect}/Ref.purs | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename src/Control/Monad/{Eff => Effect}/Ref.js (100%) rename src/Control/Monad/{Eff => Effect}/Ref.purs (97%) diff --git a/src/Control/Monad/Eff/Ref.js b/src/Control/Monad/Effect/Ref.js similarity index 100% rename from src/Control/Monad/Eff/Ref.js rename to src/Control/Monad/Effect/Ref.js diff --git a/src/Control/Monad/Eff/Ref.purs b/src/Control/Monad/Effect/Ref.purs similarity index 97% rename from src/Control/Monad/Eff/Ref.purs rename to src/Control/Monad/Effect/Ref.purs index 893465b..d0305c9 100644 --- a/src/Control/Monad/Eff/Ref.purs +++ b/src/Control/Monad/Effect/Ref.purs @@ -4,7 +4,7 @@ -- | _Note_: The `Control.Monad.ST` provides a _safe_ alternative -- | to global mutable variables when mutation is restricted to a -- | local scope. -module Control.Monad.Eff.Ref where +module Control.Monad.Effect.Ref where import Control.Monad.Effect (Effect) import Prelude (Unit, unit) From 6b55116e1713db5389e0236feef9cd1073f9f7d0 Mon Sep 17 00:00:00 2001 From: kritzcreek Date: Sun, 28 Jan 2018 21:35:05 +0100 Subject: [PATCH 3/6] missing warning spans strike again --- src/Control/Monad/Effect/Ref.purs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Control/Monad/Effect/Ref.purs b/src/Control/Monad/Effect/Ref.purs index d0305c9..677a080 100644 --- a/src/Control/Monad/Effect/Ref.purs +++ b/src/Control/Monad/Effect/Ref.purs @@ -14,19 +14,19 @@ import Prelude (Unit, unit) foreign import data Ref :: Type -> Type -- | Create a new mutable reference containing the specified value. -foreign import newRef :: forall s r. s -> Effect (Ref s) +foreign import newRef :: forall s. s -> Effect (Ref s) -- | Read the current value of a mutable reference -foreign import readRef :: forall s r. Ref s -> Effect s +foreign import readRef :: forall s. Ref s -> Effect s -- | Update the value of a mutable reference by applying a function -- | to the current value. -foreign import modifyRef' :: forall s b r. Ref s -> (s -> { state :: s, value :: b }) -> Effect b +foreign import modifyRef' :: forall s b. Ref s -> (s -> { state :: s, value :: b }) -> Effect b -- | Update the value of a mutable reference by applying a function -- | to the current value. -modifyRef :: forall s r. Ref s -> (s -> s) -> Effect Unit +modifyRef :: forall s. Ref s -> (s -> s) -> Effect Unit modifyRef ref f = modifyRef' ref (\s -> { state: f s, value: unit }) -- | Update the value of a mutable reference to the specified value. -foreign import writeRef :: forall s r. Ref s -> s -> Effect Unit +foreign import writeRef :: forall s. Ref s -> s -> Effect Unit From f3a18ab5536cd6db5f72c000aad30d1a236eda78 Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Sun, 15 Apr 2018 21:22:37 +0100 Subject: [PATCH 4/6] Updates for 0.12 --- bower.json | 2 +- src/{Control/Monad => }/Effect/Ref.js | 12 ++++++------ src/{Control/Monad => }/Effect/Ref.purs | 21 +++++++++++---------- 3 files changed, 18 insertions(+), 17 deletions(-) rename src/{Control/Monad => }/Effect/Ref.js (62%) rename src/{Control/Monad => }/Effect/Ref.purs (55%) diff --git a/bower.json b/bower.json index 9a99580..43c2921 100644 --- a/bower.json +++ b/bower.json @@ -17,6 +17,6 @@ "package.json" ], "dependencies": { - "purescript-effect": "^0.1.0" + "purescript-effect": "#compiler/0.12" } } diff --git a/src/Control/Monad/Effect/Ref.js b/src/Effect/Ref.js similarity index 62% rename from src/Control/Monad/Effect/Ref.js rename to src/Effect/Ref.js index f42e7e5..4bcefd0 100644 --- a/src/Control/Monad/Effect/Ref.js +++ b/src/Effect/Ref.js @@ -1,19 +1,19 @@ "use strict"; -exports.newRef = function (val) { +exports.new = function (val) { return function () { return { value: val }; }; }; -exports.readRef = function (ref) { +exports.read = function (ref) { return function () { return ref.value; }; }; -exports["modifyRef'"] = function (ref) { - return function (f) { +exports["modify'"] = function (f) { + return function (ref) { return function () { var t = f(ref.value); ref.value = t.state; @@ -22,8 +22,8 @@ exports["modifyRef'"] = function (ref) { }; }; -exports.writeRef = function (ref) { - return function (val) { +exports.write = function (val) { + return function (ref) { return function () { ref.value = val; return {}; diff --git a/src/Control/Monad/Effect/Ref.purs b/src/Effect/Ref.purs similarity index 55% rename from src/Control/Monad/Effect/Ref.purs rename to src/Effect/Ref.purs index 677a080..6bf9dc1 100644 --- a/src/Control/Monad/Effect/Ref.purs +++ b/src/Effect/Ref.purs @@ -1,32 +1,33 @@ -- | This module defines an effect and actions for working with -- | global mutable variables. -- | --- | _Note_: The `Control.Monad.ST` provides a _safe_ alternative +-- | _Note_: `Control.Monad.ST` provides a _safe_ alternative -- | to global mutable variables when mutation is restricted to a -- | local scope. -module Control.Monad.Effect.Ref where +module Effect.Ref where -import Control.Monad.Effect (Effect) -import Prelude (Unit, unit) +import Prelude + +import Effect (Effect) -- | A value of type `Ref a` represents a mutable reference -- | which holds a value of type `a`. foreign import data Ref :: Type -> Type -- | Create a new mutable reference containing the specified value. -foreign import newRef :: forall s. s -> Effect (Ref s) +foreign import new :: forall s. s -> Effect (Ref s) -- | Read the current value of a mutable reference -foreign import readRef :: forall s. Ref s -> Effect s +foreign import read :: forall s. Ref s -> Effect s -- | Update the value of a mutable reference by applying a function -- | to the current value. -foreign import modifyRef' :: forall s b. Ref s -> (s -> { state :: s, value :: b }) -> Effect b +foreign import modify' :: forall s b. (s -> { state :: s, value :: b }) -> Ref s -> Effect b -- | Update the value of a mutable reference by applying a function -- | to the current value. -modifyRef :: forall s. Ref s -> (s -> s) -> Effect Unit -modifyRef ref f = modifyRef' ref (\s -> { state: f s, value: unit }) +modify :: forall s. (s -> s) -> Ref s -> Effect Unit +modify f = modify' (\s -> { state: f s, value: unit }) -- | Update the value of a mutable reference to the specified value. -foreign import writeRef :: forall s. Ref s -> s -> Effect Unit +foreign import write :: forall s. s -> Ref s -> Effect Unit From 7a0e3476fc39eef91c10c33d1c2eeb794c36b15a Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Tue, 22 May 2018 23:33:40 +0100 Subject: [PATCH 5/6] Update dependencies, license --- .gitignore | 1 + LICENSE | 38 ++++++++++++++++++++++---------------- bower.json | 6 +++--- package.json | 8 ++++---- 4 files changed, 30 insertions(+), 23 deletions(-) diff --git a/.gitignore b/.gitignore index 7050558..332b6cf 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ /bower_components/ /node_modules/ /output/ +package-lock.json diff --git a/LICENSE b/LICENSE index 58b0299..311379c 100644 --- a/LICENSE +++ b/LICENSE @@ -1,20 +1,26 @@ -The MIT License (MIT) +Copyright 2018 PureScript -Copyright (c) 2014 PureScript +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/bower.json b/bower.json index 43c2921..f50e6e4 100644 --- a/bower.json +++ b/bower.json @@ -1,8 +1,7 @@ { "name": "purescript-refs", "homepage": "https://github.com/purescript/purescript-refs", - "description": "Mutable value references", - "license": "MIT", + "license": "BSD-3-Clause", "repository": { "type": "git", "url": "git://github.com/purescript/purescript-refs.git" @@ -17,6 +16,7 @@ "package.json" ], "dependencies": { - "purescript-effect": "#compiler/0.12" + "purescript-effect": "^2.0.0", + "purescript-prelude": "^4.0.0" } } diff --git a/package.json b/package.json index 26d81a7..02e36ea 100644 --- a/package.json +++ b/package.json @@ -5,9 +5,9 @@ "build": "eslint src && pulp build -- --censor-lib --strict" }, "devDependencies": { - "eslint": "^3.17.1", - "pulp": "^10.0.4", - "purescript-psa": "^0.5.0-rc.1", - "rimraf": "^2.6.1" + "eslint": "^4.19.1", + "pulp": "^12.2.0", + "purescript-psa": "^0.6.0", + "rimraf": "^2.6.2" } } From 0d9a1f9d00e7b74f63fd4d2c618f96513690c6fc Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Tue, 22 May 2018 23:39:16 +0100 Subject: [PATCH 6/6] Have modify return the updated value --- src/Effect/Ref.purs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Effect/Ref.purs b/src/Effect/Ref.purs index 6bf9dc1..edc1f8e 100644 --- a/src/Effect/Ref.purs +++ b/src/Effect/Ref.purs @@ -25,9 +25,9 @@ foreign import read :: forall s. Ref s -> Effect s foreign import modify' :: forall s b. (s -> { state :: s, value :: b }) -> Ref s -> Effect b -- | Update the value of a mutable reference by applying a function --- | to the current value. -modify :: forall s. (s -> s) -> Ref s -> Effect Unit -modify f = modify' (\s -> { state: f s, value: unit }) +-- | to the current value. The updated value is returned. +modify :: forall s. (s -> s) -> Ref s -> Effect s +modify f = modify' \s -> let s' = f s in { state: s', value: s' } -- | Update the value of a mutable reference to the specified value. foreign import write :: forall s. s -> Ref s -> Effect Unit