23
									
								
								common/src/Configuration.hs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								common/src/Configuration.hs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
{-# Language NoImplicitPrelude #-}
 | 
			
		||||
{-# Language DeriveGeneric #-}
 | 
			
		||||
{-# Language DuplicateRecordFields #-}
 | 
			
		||||
module Configuration where
 | 
			
		||||
 | 
			
		||||
import ClassyPrelude
 | 
			
		||||
import Dhall (Interpret)
 | 
			
		||||
 | 
			
		||||
data Pg = Pg { username :: Text
 | 
			
		||||
             , password :: Text
 | 
			
		||||
             , host :: Text
 | 
			
		||||
             , database :: Text }
 | 
			
		||||
        deriving (Show, Generic)
 | 
			
		||||
 | 
			
		||||
newtype Store = Store { path :: Text } deriving (Show, Generic)
 | 
			
		||||
 | 
			
		||||
data Config = Config { database :: Pg
 | 
			
		||||
                     , store :: Store }
 | 
			
		||||
            deriving (Show, Generic)
 | 
			
		||||
 | 
			
		||||
instance Interpret Pg
 | 
			
		||||
instance Interpret Store
 | 
			
		||||
instance Interpret Config
 | 
			
		||||
							
								
								
									
										24
									
								
								common/src/Data/Versioned.hs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								common/src/Data/Versioned.hs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
{-# Language KindSignatures #-}
 | 
			
		||||
{-# Language DataKinds #-}
 | 
			
		||||
{-# Language DefaultSignatures #-}
 | 
			
		||||
{-# Language MultiParamTypeClasses #-}
 | 
			
		||||
{-# Language FunctionalDependencies #-}
 | 
			
		||||
module Data.Versioned where
 | 
			
		||||
 | 
			
		||||
import GHC.TypeLits
 | 
			
		||||
import ClassyPrelude
 | 
			
		||||
import Data.Generics.Product
 | 
			
		||||
 | 
			
		||||
newtype Versioned (v :: Nat) a = Versioned a deriving (Show)
 | 
			
		||||
 | 
			
		||||
instance Functor (Versioned v) where
 | 
			
		||||
  fmap f (Versioned a) = Versioned (f a)
 | 
			
		||||
 | 
			
		||||
instance Applicative (Versioned v) where
 | 
			
		||||
  pure = Versioned
 | 
			
		||||
  (Versioned f) <*> (Versioned a) = Versioned (f a)
 | 
			
		||||
 | 
			
		||||
class Migrate a b | b -> a where
 | 
			
		||||
  migrate :: a -> b
 | 
			
		||||
  default migrate :: (Subtype b a) => a -> b
 | 
			
		||||
  migrate = upcast
 | 
			
		||||
		Reference in New Issue
	
	Block a user