-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
23 changed files
with
268 additions
and
50 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
module Address( | ||
Address(Address) | ||
) where | ||
|
||
import SharedTypes | ||
import String50 | ||
|
||
data Address = Address { | ||
addressLine1 :: String50, | ||
addressLine2 :: String50, | ||
addressLine3 :: String50, | ||
addressLine4 :: String50, | ||
city :: City, | ||
zipCode :: ZipCode | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
module CheckedAddress where | ||
|
||
import SharedTypes | ||
|
||
data CheckedAddress = CheckedAddress { | ||
addressLine1 :: String, | ||
addressLine2 :: String, | ||
addressLine3 :: String, | ||
addressLine4 :: String, | ||
city :: String, | ||
zipCode :: String | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
module CustomerInfo where | ||
|
||
import String50 | ||
import SharedTypes | ||
import PersonalName | ||
|
||
data CustomerInfo = CustomerInfo { | ||
name :: PersonalName.PersonalName, | ||
emailAddress :: EmailAddress | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
module KilogramQuantity( | ||
KilogramQuantity, create, value | ||
) where | ||
|
||
newtype KilogramQuantity = KilogramQuantity Double deriving Show | ||
|
||
create :: Double -> KilogramQuantity | ||
create value | value > 0 && value < 1000 = KilogramQuantity value | ||
| otherwise = error "Invalid value" | ||
|
||
value :: KilogramQuantity -> Double | ||
value (KilogramQuantity value) = value |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,10 @@ | ||
module OrderAcknowledgmentSent where | ||
|
||
import SharedTypes | ||
import qualified OrderId | ||
|
||
data OrderAcknowledgmentSent = OrderAcknowledgmentSent { | ||
orderId :: OrderId, | ||
orderId :: OrderId.OrderId, | ||
emailAddress :: EmailAddress | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
module OrderId( | ||
OrderId, orderId, value | ||
) where | ||
|
||
newtype OrderId = OrderId String deriving (Eq, Show) | ||
|
||
orderId :: String -> OrderId | ||
orderId value | null value = error "OrderId must not be empty" | ||
| length value > 50 = error "OrderId must not be more than 50 chars" | ||
| otherwise = OrderId value | ||
|
||
value :: OrderId -> String | ||
value (OrderId str) = str |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,12 @@ | ||
module OrderLine where | ||
|
||
import SharedTypes | ||
import OrderLineId | ||
import OrderQuantity | ||
import ProductCode | ||
|
||
data OrderLine = OrderLine { | ||
orderLineId :: OrderLineId, | ||
orderId :: OrderId, | ||
productId :: ProductId, | ||
orderQuantity :: Int | ||
productCode :: ProductCode.ProductCode, | ||
quantity :: OrderQuantity | ||
} deriving (Show) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
module OrderLineId( | ||
OrderLineId, create, value | ||
) where | ||
|
||
newtype OrderLineId = OrderLineId String deriving (Eq, Show) | ||
|
||
create :: String -> OrderLineId | ||
create value | null value = error "OrderLineId must not be empty" | ||
| length value > 50 = error "OrderLineId must not be more than 50 chars" | ||
| otherwise = OrderLineId value | ||
|
||
value :: OrderLineId -> String | ||
value (OrderLineId str) = str |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,19 +1,8 @@ | ||
-- TODO "smart constructors" - book loc 2618 / https://wiki.haskell.org/Smart_constructors | ||
-- This seems cumbersome. We can't pattern match anymore on OrderQuantity. Solutions? | ||
module OrderQuantity( | ||
OrderQuantity(UnitQuantity, KilogramQuantity) | ||
-- unitQuantity | ||
) where | ||
|
||
-- data OrderQuantity = OrderUnitQuantity UnitQuantity UnitQuantityValue | OrderKilogramQuantity Double deriving (Show) | ||
data OrderQuantity = UnitQuantity UnitQuantityValue | KilogramQuantity Double deriving (Show) | ||
import UnitQuantity | ||
import KilogramQuantity | ||
|
||
-- newtype UnitQuantity = UnitQuantity UnitQuantityValue deriving Show | ||
type UnitQuantityValue = Int | ||
|
||
-- unitQuantity :: UnitQuantityValue -> Either String UnitQuantity | ||
-- unitQuantity value | value > 0 && value < 1000 = Right $ UnitQuantity value | ||
-- | otherwise = Left "Invalid value" | ||
|
||
-- quantityValue :: UnitQuantity -> UnitQuantityValue | ||
-- quantityValue (UnitQuantity value) = value | ||
data OrderQuantity = UnitQuantity UnitQuantity | KilogramQuantity KilogramQuantity deriving (Show) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
module PersonalName where | ||
|
||
import String50 | ||
|
||
data PersonalName = PersonalName { | ||
firstName :: String50, | ||
lastName :: String50 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
module ProductCode( | ||
ProductCode(Widget, Gizmo), create, value -- exporting data constructors to be able to pattern match | ||
) where | ||
|
||
data ProductCode = Widget String | Gizmo String deriving (Show) | ||
|
||
create :: String -> ProductCode | ||
create value = undefined | ||
|
||
value :: ProductCode -> Double | ||
value _ = undefined |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.