summaryrefslogtreecommitdiff
path: root/Biz/Ibb/Core.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Biz/Ibb/Core.hs')
-rw-r--r--Biz/Ibb/Core.hs184
1 files changed, 99 insertions, 85 deletions
diff --git a/Biz/Ibb/Core.hs b/Biz/Ibb/Core.hs
index fb82ff0..2c1fbae 100644
--- a/Biz/Ibb/Core.hs
+++ b/Biz/Ibb/Core.hs
@@ -1,53 +1,59 @@
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE NoImplicitPrelude #-}
-- | Main app logic
module Biz.Ibb.Core where
-import Alpha
-import Network.RemoteData
-import Data.Aeson hiding ( Success )
-import Data.Data ( Data
- , Typeable
- )
-import Data.Text ( Text )
-import GHC.Generics ( Generic )
-import Miso
-import Miso.String
-import Servant.API
-import Servant.Links
+import Alpha
+import Data.Aeson hiding (Success)
+import Data.Data
+ ( Data,
+ Typeable,
+ )
+import Data.Text (Text)
+import GHC.Generics (Generic)
+import Miso
+import Miso.String
+import Network.RemoteData
+import Servant.API
+import Servant.Links
-- * entity data types
-data Person = Person
- { _name :: Text
- -- ^ Their full name.
- , _pic :: Text
- -- ^ A link to their picture.
- , _twitter :: Text
- -- ^ Their twitter handle, without the `@` prefix.
- , _website :: Text
- -- ^ Their main website, fully formed: `https://example.com`
- , _books :: [Book]
- -- ^ A short list of the books they recommend.
- , _blurb :: Text
- -- ^ A short "about" section, like you would see on the jacket flap of a book.
- } deriving (Generic, Show, Eq, Typeable, Data, Ord)
+data Person
+ = Person
+ { -- | Their full name.
+ _name :: Text,
+ -- | A link to their picture.
+ _pic :: Text,
+ -- | Their twitter handle, without the `@` prefix.
+ _twitter :: Text,
+ -- | Their main website, fully formed: `https://example.com`
+ _website :: Text,
+ -- | A short list of the books they recommend.
+ _books :: [Book],
+ -- | A short "about" section, like you would see on the jacket flap of a book.
+ _blurb :: Text
+ }
+ deriving (Generic, Show, Eq, Typeable, Data, Ord)
instance FromJSON Person
+
instance ToJSON Person
-data Book = Book
- { _title :: Text
- , _author :: Text
- , _amznref :: Text
- -- ^ Amazon REF number, for creating affiliate links.
- } deriving (Generic, Show, Eq, Typeable, Data, Ord)
+data Book
+ = Book
+ { _title :: Text,
+ _author :: Text,
+ -- | Amazon REF number, for creating affiliate links.
+ _amznref :: Text
+ }
+ deriving (Generic, Show, Eq, Typeable, Data, Ord)
instance FromJSON Book
+
instance ToJSON Book
-- * app data types
@@ -56,10 +62,12 @@ type AppRoutes = Home
type Home = View Action
-data Model = Model
- { uri :: URI
- , people :: WebData [Person]
- } deriving (Show, Eq)
+data Model
+ = Model
+ { uri :: URI,
+ people :: WebData [Person]
+ }
+ deriving (Show, Eq)
type WebData a = RemoteData MisoString a
@@ -87,57 +95,63 @@ goHome :: URI
goHome = linkURI $ safeLink (Proxy :: Proxy AppRoutes) (Proxy :: Proxy Home)
see :: Model -> View Action
-see m = div_
- [class_ "container mt-5"]
- [ div_
- [class_ "jumbotron"]
- [ h1_ [class_ "display-4"] [text "Influenced by books"]
- , p_ [class_ "lead"]
- [text "Influential people and the books that made them."]
- , p_
- [class_ "lead"]
- [ a_
- [href_ "http://eepurl.com/ghBFjv"]
- [ text
- "Get new book recommendations from the world's influencers in your email."
- ]
- ]
+see m =
+ div_
+ [class_ "container mt-5"]
+ [ div_
+ [class_ "jumbotron"]
+ [ h1_ [class_ "display-4"] [text "Influenced by books"],
+ p_
+ [class_ "lead"]
+ [text "Influential people and the books that made them."],
+ p_
+ [class_ "lead"]
+ [ a_
+ [href_ "http://eepurl.com/ghBFjv"]
+ [ text
+ "Get new book recommendations from the world's influencers in your email."
+ ]
+ ]
+ ],
+ div_ [class_ "card-columns"] $ case people m of
+ NotAsked -> [text "Initializing..."]
+ Loading -> [text "Loading..."]
+ Failure err -> [text err]
+ Success ps -> seePerson </ ps
]
- , div_ [class_ "card-columns"] $ case people m of
- NotAsked -> [text "Initializing..."]
- Loading -> [text "Loading..."]
- Failure err -> [text err]
- Success ps -> seePerson </ ps
- ]
seePerson :: Person -> View Action
-seePerson person = div_
- [class_ "card"]
- [ div_ [class_ "card-img"]
- [img_ [class_ "card-img img-fluid", src_ $ ms $ _pic person]]
- , div_
- [class_ "card-body"]
- [ h4_ [class_ "card-title"] [text $ ms $ _name person]
- , h6_
- []
- [ a_
- [ class_ "fab fa-twitter"
- , href_ $ "https://twitter.com/" <> (ms $ _twitter person)
+seePerson person =
+ div_
+ [class_ "card"]
+ [ div_
+ [class_ "card-img"]
+ [img_ [class_ "card-img img-fluid", src_ $ ms $ _pic person]],
+ div_
+ [class_ "card-body"]
+ [ h4_ [class_ "card-title"] [text $ ms $ _name person],
+ h6_
+ []
+ [ a_
+ [ class_ "fab fa-twitter",
+ href_ $ "https://twitter.com/" <> (ms $ _twitter person)
+ ]
+ [],
+ a_ [class_ "fas fa-globe", href_ $ ms $ _website person] []
+ ],
+ p_
+ [class_ "card-text"]
+ [text $ ms $ _blurb person, ul_ [] $ seeBook </ _books person]
]
- []
- , a_ [class_ "fas fa-globe", href_ $ ms $ _website person] []
- ]
- , p_ [class_ "card-text"]
- [text $ ms $ _blurb person, ul_ [] $ seeBook </ _books person]
]
- ]
seeBook :: Book -> View Action
-seeBook book = li_
- []
- [ a_
- [ class_ "text-dark"
- , href_ $ "https://www.amazon.com/dp/" <> (ms $ _amznref book)
- ]
- [text $ ms $ _title book]
- ]
+seeBook book =
+ li_
+ []
+ [ a_
+ [ class_ "text-dark",
+ href_ $ "https://www.amazon.com/dp/" <> (ms $ _amznref book)
+ ]
+ [text $ ms $ _title book]
+ ]