{-# OPTIONS -w -O0 #-}
{-# LANGUAGE CPP, StandaloneDeriving, DeriveDataTypeable, DeriveGeneric #-}
{- |
Module      :  ATC/Id.der.hs
Description :  generated ShATermConvertible, Json instances
Copyright   :  (c) DFKI GmbH 2012
License     :  GPLv2 or higher, see LICENSE.txt

Maintainer  :  Christian.Maeder@dfki.de
Stability   :  provisional
Portability :  non-portable(derive Typeable instances)

Automatic derivation of instances via DrIFT-rule ShATermConvertible, Json
  for the type(s):
'Common.Id.Pos'
'Common.Id.Range'
'Common.Id.Token'
'Common.Id.Id'
-}

{-
Generated by 'genRules' (automatic rule generation for DrIFT). Don't touch!!
  dependency files:
Common/Id.hs
-}

module ATC.Id () where

import ATerm.Lib
import Common.Id
import Common.Json.Instances
import Data.Aeson(ToJSON, FromJSON)
import Data.Char
import Data.Data
import Data.List (isPrefixOf)
import Data.Ratio
import GHC.Generics(Generic)
import qualified Data.Set as Set

{-! for Common.Id.Pos derive : ShATermConvertible !-}
{-! for Common.Id.Range derive : ShATermConvertible !-}
{-! for Common.Id.Token derive : ShATermConvertible !-}
{-! for Common.Id.Id derive : ShATermConvertible !-}

{-! for Common.Id.Pos derive : Json !-}
{-! for Common.Id.Range derive : Json !-}
{-! for Common.Id.Token derive : Json !-}
{-! for Common.Id.Id derive : Json !-}

-- Generated by DrIFT, look but don't touch!

instance ShATermConvertible Common.Id.Pos where
  toShATermAux :: ATermTable -> Pos -> IO (ATermTable, Int)
toShATermAux att0 :: ATermTable
att0 xv :: Pos
xv = case Pos
xv of
    SourcePos a :: String
a b :: Int
b c :: Int
c -> do
      (att1 :: ATermTable
att1, a' :: Int
a') <- ATermTable -> String -> IO (ATermTable, Int)
forall t.
ShATermConvertible t =>
ATermTable -> t -> IO (ATermTable, Int)
toShATerm' ATermTable
att0 String
a
      (att2 :: ATermTable
att2, b' :: Int
b') <- ATermTable -> Int -> IO (ATermTable, Int)
forall t.
ShATermConvertible t =>
ATermTable -> t -> IO (ATermTable, Int)
toShATerm' ATermTable
att1 Int
b
      (att3 :: ATermTable
att3, c' :: Int
c') <- ATermTable -> Int -> IO (ATermTable, Int)
forall t.
ShATermConvertible t =>
ATermTable -> t -> IO (ATermTable, Int)
toShATerm' ATermTable
att2 Int
c
      (ATermTable, Int) -> IO (ATermTable, Int)
forall (m :: * -> *) a. Monad m => a -> m a
return ((ATermTable, Int) -> IO (ATermTable, Int))
-> (ATermTable, Int) -> IO (ATermTable, Int)
forall a b. (a -> b) -> a -> b
$ ShATerm -> ATermTable -> (ATermTable, Int)
addATerm (String -> [Int] -> [Int] -> ShATerm
ShAAppl "SourcePos" [Int
a', Int
b', Int
c'] []) ATermTable
att3
  fromShATermAux :: Int -> ATermTable -> (ATermTable, Pos)
fromShATermAux ix :: Int
ix att0 :: ATermTable
att0 = case Int -> ATermTable -> ShATerm
getShATerm Int
ix ATermTable
att0 of
    ShAAppl "SourcePos" [a :: Int
a, b :: Int
b, c :: Int
c] _ ->
      case Int -> ATermTable -> (ATermTable, String)
forall t.
ShATermConvertible t =>
Int -> ATermTable -> (ATermTable, t)
fromShATerm' Int
a ATermTable
att0 of
      { (att1 :: ATermTable
att1, a' :: String
a') ->
      case Int -> ATermTable -> (ATermTable, Int)
forall t.
ShATermConvertible t =>
Int -> ATermTable -> (ATermTable, t)
fromShATerm' Int
b ATermTable
att1 of
      { (att2 :: ATermTable
att2, b' :: Int
b') ->
      case Int -> ATermTable -> (ATermTable, Int)
forall t.
ShATermConvertible t =>
Int -> ATermTable -> (ATermTable, t)
fromShATerm' Int
c ATermTable
att2 of
      { (att3 :: ATermTable
att3, c' :: Int
c') ->
      (ATermTable
att3, String -> Int -> Int -> Pos
SourcePos String
a' Int
b' Int
c') }}}
    u :: ShATerm
u -> String -> ShATerm -> (ATermTable, Pos)
forall a. String -> ShATerm -> a
fromShATermError "Common.Id.Pos" ShATerm
u

instance ShATermConvertible Common.Id.Range where
  toShATermAux :: ATermTable -> Range -> IO (ATermTable, Int)
toShATermAux att0 :: ATermTable
att0 xv :: Range
xv = case Range
xv of
    Range a :: [Pos]
a -> do
      (att1 :: ATermTable
att1, a' :: Int
a') <- ATermTable -> [Pos] -> IO (ATermTable, Int)
forall t.
ShATermConvertible t =>
ATermTable -> t -> IO (ATermTable, Int)
toShATerm' ATermTable
att0 [Pos]
a
      (ATermTable, Int) -> IO (ATermTable, Int)
forall (m :: * -> *) a. Monad m => a -> m a
return ((ATermTable, Int) -> IO (ATermTable, Int))
-> (ATermTable, Int) -> IO (ATermTable, Int)
forall a b. (a -> b) -> a -> b
$ ShATerm -> ATermTable -> (ATermTable, Int)
addATerm (String -> [Int] -> [Int] -> ShATerm
ShAAppl "Range" [Int
a'] []) ATermTable
att1
  fromShATermAux :: Int -> ATermTable -> (ATermTable, Range)
fromShATermAux ix :: Int
ix att0 :: ATermTable
att0 = case Int -> ATermTable -> ShATerm
getShATerm Int
ix ATermTable
att0 of
    ShAAppl "Range" [a :: Int
a] _ ->
      case Int -> ATermTable -> (ATermTable, [Pos])
forall t.
ShATermConvertible t =>
Int -> ATermTable -> (ATermTable, t)
fromShATerm' Int
a ATermTable
att0 of
      { (att1 :: ATermTable
att1, a' :: [Pos]
a') ->
      (ATermTable
att1, [Pos] -> Range
Range [Pos]
a') }
    u :: ShATerm
u -> String -> ShATerm -> (ATermTable, Range)
forall a. String -> ShATerm -> a
fromShATermError "Common.Id.Range" ShATerm
u

instance ShATermConvertible Common.Id.Token where
  toShATermAux :: ATermTable -> Token -> IO (ATermTable, Int)
toShATermAux att0 :: ATermTable
att0 xv :: Token
xv = case Token
xv of
    Token a :: String
a b :: Range
b -> do
      (att1 :: ATermTable
att1, a' :: Int
a') <- ATermTable -> String -> IO (ATermTable, Int)
forall t.
ShATermConvertible t =>
ATermTable -> t -> IO (ATermTable, Int)
toShATerm' ATermTable
att0 String
a
      (att2 :: ATermTable
att2, b' :: Int
b') <- ATermTable -> Range -> IO (ATermTable, Int)
forall t.
ShATermConvertible t =>
ATermTable -> t -> IO (ATermTable, Int)
toShATerm' ATermTable
att1 Range
b
      (ATermTable, Int) -> IO (ATermTable, Int)
forall (m :: * -> *) a. Monad m => a -> m a
return ((ATermTable, Int) -> IO (ATermTable, Int))
-> (ATermTable, Int) -> IO (ATermTable, Int)
forall a b. (a -> b) -> a -> b
$ ShATerm -> ATermTable -> (ATermTable, Int)
addATerm (String -> [Int] -> [Int] -> ShATerm
ShAAppl "Token" [Int
a', Int
b'] []) ATermTable
att2
  fromShATermAux :: Int -> ATermTable -> (ATermTable, Token)
fromShATermAux ix :: Int
ix att0 :: ATermTable
att0 = case Int -> ATermTable -> ShATerm
getShATerm Int
ix ATermTable
att0 of
    ShAAppl "Token" [a :: Int
a, b :: Int
b] _ ->
      case Int -> ATermTable -> (ATermTable, String)
forall t.
ShATermConvertible t =>
Int -> ATermTable -> (ATermTable, t)
fromShATerm' Int
a ATermTable
att0 of
      { (att1 :: ATermTable
att1, a' :: String
a') ->
      case Int -> ATermTable -> (ATermTable, Range)
forall t.
ShATermConvertible t =>
Int -> ATermTable -> (ATermTable, t)
fromShATerm' Int
b ATermTable
att1 of
      { (att2 :: ATermTable
att2, b' :: Range
b') ->
      (ATermTable
att2, String -> Range -> Token
Token String
a' Range
b') }}
    u :: ShATerm
u -> String -> ShATerm -> (ATermTable, Token)
forall a. String -> ShATerm -> a
fromShATermError "Common.Id.Token" ShATerm
u

instance ShATermConvertible Common.Id.Id where
  toShATermAux :: ATermTable -> Id -> IO (ATermTable, Int)
toShATermAux att0 :: ATermTable
att0 xv :: Id
xv = case Id
xv of
    Id a :: [Token]
a b :: [Id]
b c :: Range
c -> do
      (att1 :: ATermTable
att1, a' :: Int
a') <- ATermTable -> [Token] -> IO (ATermTable, Int)
forall t.
ShATermConvertible t =>
ATermTable -> t -> IO (ATermTable, Int)
toShATerm' ATermTable
att0 [Token]
a
      (att2 :: ATermTable
att2, b' :: Int
b') <- ATermTable -> [Id] -> IO (ATermTable, Int)
forall t.
ShATermConvertible t =>
ATermTable -> t -> IO (ATermTable, Int)
toShATerm' ATermTable
att1 [Id]
b
      (att3 :: ATermTable
att3, c' :: Int
c') <- ATermTable -> Range -> IO (ATermTable, Int)
forall t.
ShATermConvertible t =>
ATermTable -> t -> IO (ATermTable, Int)
toShATerm' ATermTable
att2 Range
c
      (ATermTable, Int) -> IO (ATermTable, Int)
forall (m :: * -> *) a. Monad m => a -> m a
return ((ATermTable, Int) -> IO (ATermTable, Int))
-> (ATermTable, Int) -> IO (ATermTable, Int)
forall a b. (a -> b) -> a -> b
$ ShATerm -> ATermTable -> (ATermTable, Int)
addATerm (String -> [Int] -> [Int] -> ShATerm
ShAAppl "Id" [Int
a', Int
b', Int
c'] []) ATermTable
att3
  fromShATermAux :: Int -> ATermTable -> (ATermTable, Id)
fromShATermAux ix :: Int
ix att0 :: ATermTable
att0 = case Int -> ATermTable -> ShATerm
getShATerm Int
ix ATermTable
att0 of
    ShAAppl "Id" [a :: Int
a, b :: Int
b, c :: Int
c] _ ->
      case Int -> ATermTable -> (ATermTable, [Token])
forall t.
ShATermConvertible t =>
Int -> ATermTable -> (ATermTable, t)
fromShATerm' Int
a ATermTable
att0 of
      { (att1 :: ATermTable
att1, a' :: [Token]
a') ->
      case Int -> ATermTable -> (ATermTable, [Id])
forall t.
ShATermConvertible t =>
Int -> ATermTable -> (ATermTable, t)
fromShATerm' Int
b ATermTable
att1 of
      { (att2 :: ATermTable
att2, b' :: [Id]
b') ->
      case Int -> ATermTable -> (ATermTable, Range)
forall t.
ShATermConvertible t =>
Int -> ATermTable -> (ATermTable, t)
fromShATerm' Int
c ATermTable
att2 of
      { (att3 :: ATermTable
att3, c' :: Range
c') ->
      (ATermTable
att3, [Token] -> [Id] -> Range -> Id
Id [Token]
a' [Id]
b' Range
c') }}}
    u :: ShATerm
u -> String -> ShATerm -> (ATermTable, Id)
forall a. String -> ShATerm -> a
fromShATermError "Common.Id.Id" ShATerm
u

deriving instance GHC.Generics.Generic Common.Id.Pos
instance Data.Aeson.ToJSON Common.Id.Pos where
instance Data.Aeson.FromJSON Common.Id.Pos where

deriving instance GHC.Generics.Generic Common.Id.Range
instance Data.Aeson.ToJSON Common.Id.Range where
instance Data.Aeson.FromJSON Common.Id.Range where

deriving instance GHC.Generics.Generic Common.Id.Token
instance Data.Aeson.ToJSON Common.Id.Token where
instance Data.Aeson.FromJSON Common.Id.Token where

deriving instance GHC.Generics.Generic Common.Id.Id
instance Data.Aeson.ToJSON Common.Id.Id where
instance Data.Aeson.FromJSON Common.Id.Id where