gpt4 book ai didi

haskell - newtype 如何帮助隐藏任何东西?

转载 作者:行者123 更新时间:2023-12-04 13:13:36 28 4
gpt4 key购买 nike

真实世界的haskell 说:

we will hide the details of our parser type using a newtype declaration



我不明白我们如何使用新类型隐藏任何东西。谁能详细说明?我们试图隐藏什么以及我们如何做到这一点。
data ParseState = ParseState {
string :: L.ByteString
, offset :: Int64 -- imported from Data.Int
} deriving (Show)


newtype Parse a = Parse {
runParse :: ParseState -> Either String (a, ParseState)
}

最佳答案

这个想法是结合模块 + 新类型,以防止人们看到我们如何实现事物的内部结构。

-- module A
module A (A, toA) where -- Notice we limit our exports
newtype A = A {unA :: Int}

toA :: Int -> A
toA = -- Do clever validation

-- module B
import A
foo :: A
foo = toA 1 -- Must use toA and can't see internals of A

这样可以防止模式匹配和任意构造 A .这让我们的 A模块对 A 做出某些假设并更改 A 的内部结构逍遥法外!

这特别好,因为在运行时 newtype s 被删除,所以几乎没有做这样的事情的开销

关于haskell - newtype 如何帮助隐藏任何东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19872175/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com