{-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -fno-warn-orphans #-} {-# OPTIONS_GHC -fno-warn-missing-signatures #-} {-# OPTIONS_GHC -O0 #-} -- speedup compile-timeā€¦ module Compiling.Foldable.Test where import Test.Tasty import Data.Proxy (Proxy(..)) import Data.Text (Text) import Language.Symantic.Parsing import Language.Symantic.Typing import Language.Symantic.Compiling import Compiling.Term.Test import Parsing.Test -- * Tests type Ifaces = [ Proxy (->) , Proxy [] , Proxy Int , Proxy Foldable ] (==>) = test_compile (Proxy::Proxy Ifaces) instance ( Inj_Token (Syntax Text) ts Foldable , Tokenize (Syntax Text) (Syntax Text) ts ) => TokenizeT (Syntax Text) (Syntax Text) ts (Proxy Foldable) where tokenizeT _t (Syntax "foldMap" (ast_f : ast_m : as)) = Just $ do f <- tokenize ast_f m <- tokenize ast_m Right $ (as,) $ EToken $ inj_token (Syntax "foldMap" [ast_f, ast_m]) $ Token_Term_Foldable_foldMap f m tokenizeT _t _sy = Nothing tests :: TestTree tests = testGroup "Foldable" [ Syntax "foldMap" [ syLam "x" (sy @Int) $ Syntax "list" [ sy @Int , syVar "x" , syVar "x" ] , Syntax "list" [ sy @Int , syLit (1::Int) , syLit (2::Int) , syLit (3::Int) ] ] ==> Right ( ty @[] :$ ty @Int , [1, 1, 2, 2, 3, 3] , "foldMap (\\x0 -> [x0, x0]) [1, 2, 3]" ) ]