Insertion support
This commit is contained in:
		
							
								
								
									
										54
									
								
								src/Data/Buuka.hs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								src/Data/Buuka.hs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
{-# LANGUAGE DataKinds #-}
 | 
			
		||||
{-# LANGUAGE TypeFamilies #-}
 | 
			
		||||
module Data.Buuka
 | 
			
		||||
  ( BuukaQ(..)
 | 
			
		||||
  , BuukaU(..)
 | 
			
		||||
  , BuukaEntry(..)
 | 
			
		||||
  , URL(..)
 | 
			
		||||
 | 
			
		||||
  , insert
 | 
			
		||||
  )
 | 
			
		||||
  where
 | 
			
		||||
 | 
			
		||||
import Data.Map
 | 
			
		||||
       (Map)
 | 
			
		||||
import qualified Data.Map.Strict as M
 | 
			
		||||
 | 
			
		||||
import Database.Migrations
 | 
			
		||||
 | 
			
		||||
import Data.Aeson
 | 
			
		||||
import GHC.Generics
 | 
			
		||||
       (Generic)
 | 
			
		||||
 | 
			
		||||
import Control.Monad.Reader
 | 
			
		||||
import Control.Monad.State
 | 
			
		||||
 | 
			
		||||
newtype URL = URL String
 | 
			
		||||
  deriving stock (Show, Eq, Generic, Ord)
 | 
			
		||||
  deriving newtype (ToJSON, FromJSON, FromJSONKey, ToJSONKey)
 | 
			
		||||
 | 
			
		||||
data BuukaEntry
 | 
			
		||||
  = BuukaEntry { url :: URL
 | 
			
		||||
               , title :: Maybe String
 | 
			
		||||
               }
 | 
			
		||||
  deriving stock (Show, Eq, Generic)
 | 
			
		||||
  deriving anyclass (ToJSON, FromJSON)
 | 
			
		||||
 | 
			
		||||
instance SafeJSON BuukaEntry where
 | 
			
		||||
  type Version BuukaEntry = 0
 | 
			
		||||
 | 
			
		||||
newtype Buuka = Buuka ( Map URL BuukaEntry )
 | 
			
		||||
  deriving newtype (Semigroup, Monoid, FromJSON, ToJSON)
 | 
			
		||||
 | 
			
		||||
insert :: BuukaEntry -> Buuka -> Buuka
 | 
			
		||||
insert e (Buuka b) = Buuka (M.insert (url e) e b)
 | 
			
		||||
 | 
			
		||||
instance SafeJSON Buuka where
 | 
			
		||||
  type Version Buuka = 0
 | 
			
		||||
 | 
			
		||||
newtype BuukaQ a = BuukaQ { runBuukaQ :: Reader Buuka a }
 | 
			
		||||
  deriving newtype (Functor, Applicative, Monad, MonadReader Buuka)
 | 
			
		||||
 | 
			
		||||
-- Last write wins
 | 
			
		||||
newtype BuukaU a = BuukaU { runBuukaU :: State Buuka a }
 | 
			
		||||
  deriving newtype (Functor, Applicative, Monad, MonadState Buuka)
 | 
			
		||||
							
								
								
									
										4
									
								
								src/Data/Environment.hs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								src/Data/Environment.hs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
module Data.Environment where
 | 
			
		||||
 | 
			
		||||
newtype Environment = Environment { workdir :: FilePath }
 | 
			
		||||
  deriving stock (Show, Eq)
 | 
			
		||||
		Reference in New Issue
	
	Block a user