module Main where

import Prelude
import Data.Symbol (SProxy(..))
import Prim.Symbol (class Append)
import Effect.Console (log)

class Balanced (sym :: Symbol)

instance balanced1 :: Balanced ""
else
instance balanced2
  :: ( Append "(" sym1 sym
     , Append sym2 ")" sym1
     , Balanced sym2
     ) => Balanced sym

balanced :: forall sym. Balanced sym => SProxy sym -> String
balanced _ = "ok"

b0 :: String
b0 = balanced (SProxy :: SProxy "")

b1 :: String
b1 = balanced (SProxy :: SProxy "()")

b2 :: String
b2 = balanced (SProxy :: SProxy "(())")

b3 :: String
b3 = balanced (SProxy :: SProxy "((()))")

main = do
  log b0
  log b1
  log b2
  log b3
  log "Done"