haskell - Haskell:将新类型视为字符串
问题描述
我经常有这个简单的模式:
newtype Username = Username Text
目的当然是在操作“用户名”时提高安全性,而不是将其与其他字段混合。但是,一直打包和拆包变得乏味。我想知道是否有将“用户名”视为字符串(例如 AsString 或 OverloadedStrings)的技巧,或者它是否违背了目的?
解决方案
我认为你的newtype
方法是一个很好的方法。你必须问自己为什么你一直需要打包和拆包。对于这样的类型,您通常应该有一个定义它的模块、一堆乏味的类型类实例和一些操作函数。你把它敲出来。
{-# language GeneralizedNewtypeDeriving #-}
module MyNamespace.Username (.....) where
import Data.Hashable
newtype Username = Username Text
deriving (Eq, Ord, Show, Hashable)
unUsername :: Username -> Text
validateForm :: Text -> Maybe Username
推荐阅读
- c++ - 如何在 Particle (Spark) 的本地构建中包含第三方库?
- android - 即使传递给回调的列表为空,如何继续向服务器发送请求以获取 loadAfter() 中的下一个项目?
- drools - Drool 查询在 LHS 中使用时行为不稳定
- python-requests - 如何修复“OSError:无法识别图像文件”?我正在尝试通过传递图像 url 来获取图像大小
- python - 在列表理解中理解这个 if 语句
- mongodb - 如何将csv文件导入mongoDB,其中mongo字段具有数组字段
- python - 当工人被杀时,芹菜中重新排队任务的默认等待时间是多少?
- excel - 如何使用文本文件中的文本填充 ComboBox 和 TextBox
- python - 通过解决 procrustes 问题的线性投影矩阵
- opencv - 基于分割的对象跟踪