纯函数式语言(haskell)用户如何进行设计?他们使用什么替代uml?
How does pure functional language(haskell) users make Design?what alternative to uml they use?
鉴于 haskell 没有概念对象(即使它有关键字 class
) Haskell 开发人员如何设计他们的代码?他们如何表示 interaction/entities?他们有替代 uml 的方法吗?或 class 等效?(或者他们甚至关心?)
我不知道任何正式(化)的绘画或描述建筑的概念。
尽管如此,您可以构建您的应用程序
最基本的方法是利用类型系统的表现力:
- 在
newtype
中包装简单类型 - 或者使用 type
同义词 - 区分 Int
和 Age
值,例如newtype Age = Age Int
.
- 将更复杂的类型组合为现有的产品,例如
data Person = Person { name :: String, age :: Age}
- 或使用求和类型
data Employee = Chef Person | Waiter Person
所有这些数据类型 - 可以做得更精细 - 可以 accessed/modified* 通过记录语法或镜头。我倾向于将数据类型视为我编写的应用程序的骨架 - 并使用编译器来忠实于我在开始时的想法并且 从不 通过使用 unsafeXX
函数。
缺少OO/Encapsulation
我从来没有 - 没有必要将函数附加到对象(我认为这是完全错误的,但这不在这里讨论)。
封装的基本形式可以通过 newtype
和带有导出的模块来完成。
多态性
类型类已经可以做很多事情,如果你还没有使用过它们,它有点像接口,(但输入更少)——但是你可以用类型类等高级东西完成更多的事情家庭。
结论
因此,如果我想绘制我的程序的 structure/architecture,我会从我的 data-types 作为框开始,并使用箭头作为它们之间的函数。并且可能使用 "special" 箱子作为容器类型。
*:从技术上讲,人们通常不会修改内容,而是从旧值创建新值,因为(几乎)一切都是不可变的。
鉴于 haskell 没有概念对象(即使它有关键字 class
) Haskell 开发人员如何设计他们的代码?他们如何表示 interaction/entities?他们有替代 uml 的方法吗?或 class 等效?(或者他们甚至关心?)
我不知道任何正式(化)的绘画或描述建筑的概念。
尽管如此,您可以构建您的应用程序
最基本的方法是利用类型系统的表现力:
- 在
newtype
中包装简单类型 - 或者使用type
同义词 - 区分Int
和Age
值,例如newtype Age = Age Int
. - 将更复杂的类型组合为现有的产品,例如
data Person = Person { name :: String, age :: Age}
- 或使用求和类型
data Employee = Chef Person | Waiter Person
所有这些数据类型 - 可以做得更精细 - 可以 accessed/modified* 通过记录语法或镜头。我倾向于将数据类型视为我编写的应用程序的骨架 - 并使用编译器来忠实于我在开始时的想法并且 从不 通过使用 unsafeXX
函数。
缺少OO/Encapsulation
我从来没有 - 没有必要将函数附加到对象(我认为这是完全错误的,但这不在这里讨论)。
封装的基本形式可以通过 newtype
和带有导出的模块来完成。
多态性
类型类已经可以做很多事情,如果你还没有使用过它们,它有点像接口,(但输入更少)——但是你可以用类型类等高级东西完成更多的事情家庭。
结论
因此,如果我想绘制我的程序的 structure/architecture,我会从我的 data-types 作为框开始,并使用箭头作为它们之间的函数。并且可能使用 "special" 箱子作为容器类型。
*:从技术上讲,人们通常不会修改内容,而是从旧值创建新值,因为(几乎)一切都是不可变的。