packages feed

sai-shape-syb-0.2.0: tests/test-01.hs

{-# LANGUAGE CPP #-}
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}

  module Main ( main ) where

  import SAI.Data.Generics.Shape.SYB ( Homo, ghom, shapeOf, weightedShapeOf )
--import SAI.Data.Generics.Shape.SYB ( Rose(..) )
  import Data.Data ( Data, Typeable )
--import Data.Data
  import Data.Generics.Aliases ( mkT )
  import Data.Generics.Schemes ( everywhere )
--import Data.Generics ( Generic )
--import Data.Tree ( Tree(..) )

#if 1
  data TA = A1 | A2 TB TA TB deriving ( Data, Typeable )
  data TB = B TA deriving ( Data, Typeable )
  exprAB = A2 (B A1) A1 (B A1)
#else
  data TA = A1 | A2 TB deriving ( Data, Typeable )
  data TB = B TA deriving ( Data, Typeable )
  exprAB = A2 (B (A2 (B A1)))
  data TA = A1 String | A2 (Int,Int) TB deriving ( Data, Typeable )
--instance Data TA
--instance Typeable TA
--instance Generic TA
  data TB = B TA String deriving ( Data, Typeable )
--instance Data TB
--instance Typeable TB
--instance Generic TB
--data TA = A1 String | A2 (Int,Int) TB deriving ( Data, Typeable )
--data TB = B TA String deriving ( Data, Typeable )
  exprAB = A2 (2,5) (B (A1 "foo") "bar")
#endif

  main = putStrLn $ show $ shapeOf exprAB
--main = putStrLn $ show $ ( mkDataTree $ shapeOf exprAB :: Tree () )
--main = putStrLn $ show $ ( shapeOf exprAB :: Tree () )
--main = putStrLn $ show $ shapeOf ( exprAB :: TA )
--main = putStrLn $ show $ wtdShapeOf ( exprAB :: TA )
--main = putStrLn $ show $ wtdShapeOf ( [[1,2],[3],[4,5,6]] :: [[Int]] )
--main = putStrLn $ show $ wtdShapeOf [[1,2],[3],[4,5,6]]

  wtdShapeOf :: forall d. Data d => d -> Homo Int
  wtdShapeOf = ghom (const 1) (+)  -- as of typing this line, battery died!