From 9c6a643c849e61f02265fbef1757bdb4b3ac8be8 Mon Sep 17 00:00:00 2001 From: Jorge Acereda Date: Thu, 10 Nov 2016 23:28:38 +0100 Subject: [PATCH 1/2] Fix toEnum for (Maybe a) --- src/Data/Enum.purs | 4 ++-- test/Test/Data/Enum.purs | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Data/Enum.purs b/src/Data/Enum.purs index 71d41f3..e630405 100644 --- a/src/Data/Enum.purs +++ b/src/Data/Enum.purs @@ -196,8 +196,8 @@ instance boundedEnumMaybe :: BoundedEnum a => BoundedEnum (Maybe a) where toEnum = to cardinality where to :: Cardinality a -> Int -> Maybe (Maybe a) - to _ 0 = Nothing - to (Cardinality ca) n | n <= ca = Just $ toEnum (n - 1) + to _ 0 = Just Nothing + to (Cardinality ca) n | n > 0 && n <= ca = Just $ toEnum (n - 1) to _ _ = Nothing fromEnum Nothing = 0 fromEnum (Just e) = fromEnum e + 1 diff --git a/test/Test/Data/Enum.purs b/test/Test/Data/Enum.purs index c57b50f..52b413f 100644 --- a/test/Test/Data/Enum.purs +++ b/test/Test/Data/Enum.purs @@ -7,7 +7,7 @@ import Control.Monad.Eff.Console (CONSOLE, log) import Data.Enum (class Enum, class BoundedEnum, defaultToEnum, defaultFromEnum, defaultCardinality, enumFromTo, enumFromThenTo, upFrom, - downFrom) + downFrom, toEnum) import Data.Maybe (Maybe(..)) import Test.Assert (ASSERT, assert) @@ -63,3 +63,10 @@ testEnum = do assert $ downFrom D == [C, B, A] assert $ downFrom B == [ A] assert $ downFrom A == [ ] + + log "BoundedEnum (Maybe Boolean)" + assert $ toEnum (-1) == Nothing :: Maybe (Maybe Boolean) + assert $ toEnum 0 == Just Nothing :: Maybe (Maybe Boolean) + assert $ toEnum 1 == Just (Just false) :: Maybe (Maybe Boolean) + assert $ toEnum 2 == Just (Just true) :: Maybe (Maybe Boolean) + assert $ toEnum 3 == Nothing :: Maybe (Maybe Boolean) From 6c8fb737cc371796aaa8463e04379637c6ceb272 Mon Sep 17 00:00:00 2001 From: Jorge Acereda Date: Thu, 10 Nov 2016 23:38:11 +0100 Subject: [PATCH 2/2] Simplify --- src/Data/Enum.purs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/Data/Enum.purs b/src/Data/Enum.purs index e630405..2939698 100644 --- a/src/Data/Enum.purs +++ b/src/Data/Enum.purs @@ -193,12 +193,8 @@ instance boundedEnumOrdering :: BoundedEnum Ordering where instance boundedEnumMaybe :: BoundedEnum a => BoundedEnum (Maybe a) where cardinality = Cardinality $ unwrap (cardinality :: Cardinality a) + 1 - toEnum = to cardinality - where - to :: Cardinality a -> Int -> Maybe (Maybe a) - to _ 0 = Just Nothing - to (Cardinality ca) n | n > 0 && n <= ca = Just $ toEnum (n - 1) - to _ _ = Nothing + toEnum 0 = pure Nothing + toEnum n = Just <$> toEnum (n - 1) fromEnum Nothing = 0 fromEnum (Just e) = fromEnum e + 1