Some lenses and incomplete importer
This commit is contained in:
@ -1,11 +1,16 @@
|
||||
{-# LANGUAGE TemplateHaskell #-}
|
||||
{-# LANGUAGE DataKinds #-}
|
||||
{-# LANGUAGE TypeFamilies #-}
|
||||
module Data.Buuka
|
||||
( BuukaQ(..)
|
||||
, BuukaU(..)
|
||||
, BuukaEntry(..)
|
||||
, url
|
||||
, title
|
||||
, URL(..)
|
||||
, _URL
|
||||
, Buuka
|
||||
, _Buuka
|
||||
|
||||
, insert
|
||||
, elements
|
||||
@ -13,6 +18,8 @@ module Data.Buuka
|
||||
)
|
||||
where
|
||||
|
||||
import Control.Lens (makeLenses, Iso', iso)
|
||||
|
||||
import Database.Migrations
|
||||
|
||||
import Data.Aeson
|
||||
@ -36,13 +43,18 @@ newtype URL = URL Text
|
||||
deriving stock (Show, Eq, Generic, Ord)
|
||||
deriving newtype (ToJSON, FromJSON, FromJSONKey, ToJSONKey, Hashable)
|
||||
|
||||
_URL :: Iso' URL Text
|
||||
_URL = iso (\(URL t) -> t) URL
|
||||
|
||||
data BuukaEntry
|
||||
= BuukaEntry { url :: URL
|
||||
, title :: Maybe Text
|
||||
= BuukaEntry { _url :: URL
|
||||
, _title :: Maybe Text
|
||||
}
|
||||
deriving stock (Show, Eq, Generic)
|
||||
deriving anyclass (ToJSON, FromJSON, Hashable)
|
||||
|
||||
makeLenses ''BuukaEntry
|
||||
|
||||
instance SafeJSON BuukaEntry where
|
||||
type Version BuukaEntry = 0
|
||||
|
||||
@ -50,6 +62,9 @@ newtype Buuka = Buuka [BuukaEntry]
|
||||
deriving stock (Show, Eq)
|
||||
deriving newtype (Semigroup, Monoid, FromJSON, ToJSON, Hashable)
|
||||
|
||||
_Buuka :: Iso' Buuka [BuukaEntry]
|
||||
_Buuka = iso (\(Buuka b) -> b) Buuka
|
||||
|
||||
insert :: BuukaEntry -> Buuka -> Buuka
|
||||
insert e (Buuka b) = Buuka (e : b)
|
||||
|
||||
|
Reference in New Issue
Block a user