packages feed

helium-1.8: src/Helium/StaticAnalysis/Inferencers/LocalInfo.ag

-----------------------------------------------------------------------------
-- |The Helium Compiler : Static Analysis
-- 
-- Maintainer  :  bastiaan@cs.uu.nl
-- Stability   :  experimental
-- Portability :  unknown
--
-- Make (local) information about the current node available   
-- as a local attribute

---------------------------------------------------------------------------------------
-- FunctionBinding

SEM FunctionBinding 
  | Hole
       loc . localInfo  = LocalInfo { self = UHA_FB @self
                                    , assignedType = Nothing
                                    , monos = @lhs.monos
                                    }
  | FunctionBinding 
       loc . localInfo  = LocalInfo { self = UHA_FB @self
                                    , assignedType = Nothing
                                    , monos = @lhs.monos
                                    }

---------------------------------------------------------------------------------------
-- Right-hand side expression


SEM RightHandSide 
  | Expression
       loc . localInfo  = LocalInfo { self = UHA_RHS @self
                                    , assignedType = Nothing
                                    , monos = @lhs.monos
                                    }
  | Guarded
       loc . localInfo  = LocalInfo { self = UHA_RHS @self
                                    , assignedType = Nothing
                                    , monos = @lhs.monos
                                    }
				    
---------------------------------------------------------------------------------------
-- Declaration

SEM Declaration 
  | FunctionBindings  
       loc . localInfo  = LocalInfo { self = UHA_Decl @self
                                    , assignedType = Nothing 
                                    , monos = @lhs.monos
                                    }
  | PatternBinding    
       loc . localInfo  = LocalInfo { self = UHA_Decl @self
                                    , assignedType = Nothing 
                                    , monos = @lhs.monos
                                    }

---------------------------------------------------------------------------------------
-- Expression

SEM Expression
  | Literal             
       loc . localInfo  = LocalInfo { self = UHA_Expr @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
  | Variable            
       loc . localInfo  = LocalInfo { self = UHA_Expr @self
                                    , assignedType = Just @beta
                                    , monos = @lhs.monos
                                    }
  | Hole
       loc . localInfo  = LocalInfo { self = UHA_Expr @self
                                    , assignedType = Just @beta
                                    , monos = @lhs.monos
                                    }
  | Constructor         
       loc . localInfo  = LocalInfo { self = UHA_Expr @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
  | NormalApplication   
       loc . localInfo  = LocalInfo { self = UHA_Expr @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
  | InfixApplication    
       loc . localInfo  = LocalInfo { self = UHA_Expr @self
                                    , assignedType = Just @beta
                                    , monos = @lhs.monos
                                    }
  | If                  
       loc . localInfo  = LocalInfo { self = UHA_Expr @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
  | Lambda              
       loc . localInfo  = LocalInfo { self = UHA_Expr @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
  | Case                
       loc . localInfo  = LocalInfo { self = UHA_Expr @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
  | Let                 
       loc . localInfo  = LocalInfo { self = UHA_Expr @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }                                           
  | Do                  
       loc . localInfo  = LocalInfo { self = UHA_Expr @self
                                    , assignedType = Just @beta
                                    , monos = @lhs.monos
                                    }
  | List                
       loc . localInfo  = LocalInfo { self = UHA_Expr @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
  | Tuple               
       loc . localInfo  = LocalInfo { self = UHA_Expr @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
  | Comprehension       
       loc . localInfo  = LocalInfo { self = UHA_Expr @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
  | Typed               
       loc . localInfo  = LocalInfo { self = UHA_Expr @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
  | Enum                
       loc . localInfo  = LocalInfo { self = UHA_Expr @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
  | Negate              
       loc . localInfo  = LocalInfo { self = UHA_Expr @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
  | NegateFloat         
       loc . localInfo  = LocalInfo { self = UHA_Expr @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
                                           
---------------------------------------------------------------------------------------
-- Pattern

SEM Pattern
  | Hole           
       loc . localInfo  = LocalInfo { self = UHA_Pat @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
  | Literal           
       loc . localInfo  = LocalInfo { self = UHA_Pat @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
  | Variable          
       loc . localInfo  = LocalInfo { self = UHA_Pat @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
  | Constructor       
       loc . localInfo  = LocalInfo { self = UHA_Pat @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
  | InfixConstructor  
       loc . localInfo  = LocalInfo { self = UHA_Pat @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
  | List              
       loc . localInfo  = LocalInfo { self = UHA_Pat @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
  | Tuple             
       loc . localInfo  = LocalInfo { self = UHA_Pat @self
                                    , assignedType = Just @beta
                                    , monos = @lhs.monos
                                    }
  | Negate            
       loc . localInfo  = LocalInfo { self = UHA_Pat @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
  | As                
       loc . localInfo  = LocalInfo { self = UHA_Pat @self
                                    , assignedType = Just @beta
                                    , monos = @lhs.monos 
                                    }
  | Wildcard          
       loc . localInfo  = LocalInfo { self = UHA_Pat @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }
  | NegateFloat       
       loc . localInfo  = LocalInfo { self = UHA_Pat @self
                                    , assignedType = Just @beta 
                                    , monos = @lhs.monos
                                    }

---------------------------------------------------------------------------------------
-- Statement

SEM Statement
  | Expression   
       loc . localInfo  = LocalInfo { self = UHA_Stat @self
                                    , assignedType = Nothing 
                                    , monos = @lhs.monos
                                    }
  | Let          
       loc . localInfo  = LocalInfo { self = UHA_Stat @self
                                    , assignedType = Nothing 
                                    , monos = @lhs.monos
                                    }
  | Generator    
       loc . localInfo  = LocalInfo { self = UHA_Stat @self
                                    , assignedType = Nothing 
                                    , monos = @lhs.monos
                                    }
  | Empty        
       loc . localInfo  = LocalInfo { self = UHA_Stat @self
                                    , assignedType = Nothing 
                                    , monos = @lhs.monos
                                    }

---------------------------------------------------------------------------------------
-- Qualifier

SEM Qualifier 
  | Guard        
       loc . localInfo  = LocalInfo { self = UHA_Qual @self
                                    , assignedType = Nothing 
                                    , monos = @lhs.monos
                                    }
  | Let          
       loc . localInfo  = LocalInfo { self = UHA_Qual @self
                                    , assignedType = Nothing 
                                    , monos = @lhs.monos
                                    }
  | Generator    
       loc . localInfo  = LocalInfo { self = UHA_Qual @self
                                    , assignedType = Nothing
                                    , monos = @lhs.monos
                                    }
  | Empty        
       loc . localInfo  = LocalInfo { self = UHA_Qual @self
                                    , assignedType = Nothing 
                                    , monos = @lhs.monos
                                    }

---------------------------------------------------------------------------------------
-- (Non-terminals above) Declarations                                          
                                                                                                                        
SEM Body
  | Body  
       loc . declInfo = LocalInfo { self = UHA_Decls @declarations.self
                                  , assignedType = Nothing 
                                  , monos = @lhs.monos
                                  }
SEM MaybeDeclarations 
  | Just  
       loc . declInfo = LocalInfo { self = UHA_Decls @declarations.self
                                  , assignedType = Nothing 
                                  , monos = @lhs.monos
                                  }  
SEM Expression 
  | Let   
       loc . declInfo = LocalInfo { self = UHA_Decls @declarations.self
                                  , assignedType = Nothing 
                                  , monos = @lhs.monos
                                  }  
SEM Statement
  | Let   
       loc . declInfo = LocalInfo { self = UHA_Decls @declarations.self
                                  , assignedType = Nothing 
                                  , monos = @lhs.monos
                                  }   
SEM Qualifier 
  | Let   
       loc . declInfo = LocalInfo { self = UHA_Decls @declarations.self
                                  , assignedType = Nothing 
                                  , monos = @lhs.monos
                                  }