是否可以在"let"块中定义类型同义词?



我想要这样的东西。有可能吗?

something :: String
something = 
let
type FirstName = String
type LastName = String

fullName :: FirstName -> LastName -> String
fullName = a ++ " " ++ b
in
fullName "Haskell" "Curry"

我一直在努力寻找能做到这一点的语言扩展,但没有成功。

直接答案是否定的,类型定义只能在模块级别上进行。

类似的事情是可能的:

let
fullName ::
(firstName ~ String, lastName ~ String) =>
firstName -> lastName -> String
fullName a b = a ++ " " ++ b
in
_

最新更新