假设我有一个秘密,我保留在一个类型
data Secret a = Secret a deriving Functor, Show
sec :: Secret String
Run Code Online (Sandbox Code Playgroud)
我想允许计算秘密,并以某种方式查看结果,例如
getSecretHash :: Show a => Secret a -> String
Run Code Online (Sandbox Code Playgroud)
要么
askQuestion :: (a->Bool) -> Secret a -> Bool
Run Code Online (Sandbox Code Playgroud)
但是我不想让这个秘密被直接提取出来(我知道你可以强行推出上述方法之一,但是假设秘密很大,所以这是不可行的).
当然有人可以写
reveal :: Secret a -> a
reveal (Secret x) = x
Run Code Online (Sandbox Code Playgroud)
而且我知道我可以通过在模块中放置秘密而不是导出构造函数而是给出一个来防止这种情况makeSecret :: a->Secret a,但我想知道是否有办法使用类型系统来完成它.
在不隐藏构造函数的情况下,如何创建一个不能任意提取其值的类型?
我希望有一个像
from IPython.display import display, Math
display(Math(r"e^\alpha"))
Run Code Online (Sandbox Code Playgroud)
使用MathJax进行渲染,就像在普通jupyter中所做的那样,但是它只显示如下的乳胶代码:
$$e^\alpha$$
Run Code Online (Sandbox Code Playgroud)
有没有办法让协作实验室正确渲染它?(它可以很好地处理文本单元格)。