6 \frametitle{\textsc{SPLS
}}
7 \begin{block
}{Features
}
9 \item Implementation language:
10 Clean (
{\tiny\url{http://clean.cs.ru.nl
}})
12 \item State transformer monad
\pause%
14 :: Gamma :== (Map String Type,
[String
])
15 :: Env a :== StateT Gamma (Either SemError) a
17 \item Preferably we want to have an
\CI{Either
} monad transformer
18 but clean does not have that
\ldots
23 \begin{frame
}[fragile
]
24 \frametitle{Grammar changes
}
27 \item Function type:
\pause%
29 <FunType> ::= <VoidType>
['->' <FunType>
]
30 <VoidType> ::= <Void> | Type
34 append(l1, l2) ::
[t
] ->
[t
] ->
[t
] {
38 \pause\item We check in the semantic analysis that
\CI{Void
} is only in
40 \pause\item This is for future higher-order functions
44 \begin{frame
}[fragile
]
45 \frametitle{What do we analyze exactly?
}
47 :: Pos =
{line :: Int, col :: Int
}
48 :: SemOutput :== Either
[SemError
] (AST, Gamma)
50 = ParseError Pos String // Post-parse errors
51 | UnifyError Pos Type Type // Unification
52 | FieldSelectorError Pos Type FieldSelector // hd, tail, fst, snd
53 | OperatorError Pos Op2 Type // 'a' ==
5
54 | UndeclaredVariableError Pos String // Variable ordering
57 sem :: AST -> SemOutput
61 \begin{frame
}[fragile
]
64 \begin{block
}{Scoping?
}
65 Local variables get a new name and are changed in the function body.
69 Does matter for variables, not for functions.
72 \begin{block
}{Mutual recursion?
}
76 \begin{block
}{Higher order functions?
}
77 Hopefully in the future
81 % - Can functions that are defined later in a file call earlier defined functions?
82 % - Can local variables be defined in terms of other local variables?
83 % - How do you deal with assignments?
84 % - Tell us if and how you include the value restriction.
85 %- How do you deal with recursion?
86 %- How do you deal with multiple recursion?
87 %- If you forbid multiple recursion, how do you do so?
88 % - Does your language support higher-order functions?
89 % - How do you deal with polymorphism?
90 % - How do you deal with overloading?
91 % - How does the absence/presence of type signatures influence your type