{-# LANGUAGE TemplateHaskell, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses, FlexibleContexts, UndecidableInstances, TypeSynonymInstances, TypeFamilies #-}
module MyType where

import Control.Monad.Reader
import HAppS.Data
import HAppS.State
import qualified MyType.MyType_001 as MT1

$(deriveAll [''Eq, ''Ord, ''Read, ''Show, ''Default]
  [d|
      data MyType = MyType String
   |])

$(deriveSerialize ''MyType)

instance Version MyType where
    mode = extension 2 (proxy (undefined :: MT1.MyType))

instance Migrate MT1.MyType MyType where
    migrate (MT1.MyType str) = (MyType ("2: " ++ str))

askString :: Query MyType String
askString = 
    do (MyType str) <- ask
       return str

$(mkMethods ''MyType ['askString])
            
instance Component MyType where
    type Dependencies MyType = End
    initialValue = MyType "goodbye, world!"