我将数据类型定义为:
data ComitteeView = CommitteeView { committeeId :: CommitteeId
, committeeMembers :: [Person]
}
data CommitteesView = CommitteesView { committeeView :: [CommitteeView] }
Run Code Online (Sandbox Code Playgroud)
现在,就目前而言,我将Persistent模型定义为:
Person
name Text
Committee
name Text
CommitteePerson
personId PersonId
committeeId CommitteeId
Run Code Online (Sandbox Code Playgroud)
我可以很容易地使用Esqueleto创建一个填充委员会视图的查询.它会是这样的:
getCommitteeView cid =
CommitteeView <$> runDB $
select $
from (person `InnerJoin` pxc `InnerJoin` committee) -> do
on (committee ^. CommitteeId ==. pxc ^. CommitteePersonCommitteeId)
on (person ^. PersonId ==. pxc ^. CommitteePersonPersonId)
where_ (committee ^. CommitteePersonCommitteeId ==. val cid)
return person
Run Code Online (Sandbox Code Playgroud)
现在,考虑填充问题CommitteesView …
我正在尝试为一些JavaScript"渲染"函数编写自定义的敲除绑定,以便我可以执行以下操作:
<td data-bind="numeral('0%'): interest">
Run Code Online (Sandbox Code Playgroud)
在幕后,这个假设的数字会做如下:
ko.bindingHandlers.numeral(fmt) = {
init: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContent) {
var unwrapped = ko.unwrap(valueAccessor()), allBindings = allBindingsAccessor();
$(element).html(numeral(unwrapped).format(fmt));
}
}
Run Code Online (Sandbox Code Playgroud)
我给了这个定义一个go,JavaScript真的不喜欢我试图在数字键上抽象.我应该如何处理这个问题?
我正在用SaltStack弄湿我的脚.我已经完成了我的第一个状态(带有静态配置的Vim安装程序),而我正在开发第二个状态.
不幸的是,我希望我的状态安装的应用程序没有Ubuntu软件包.我将不得不自己构建应用程序.使用Salt进行"configure-make-install"类型安装是否有"最佳实践"? 或者我应该只使用cmd?
特别是,如果我是手工做的话,我会做一些事情:
wget -c http://example.com/foo-3.4.3.tar.gz
tar xzf foo-3.4.3.tar.gz
cd foo-3.4.3
./configure --prefix=$PREFIX && make && make install
Run Code Online (Sandbox Code Playgroud) 我有一个函数,它根据迭代计算一个固定点:
equivalenceClosure :: (Ord a) => Relation a -> Relation a
equivalenceClosure = fst . List.head -- "guaranteed" to exist
. List.dropWhile (uncurry (/=)) -- removes pairs that are not equal
. U.List.pairwise (,) -- applies (,) to adjacent list elements
. iterate ( reflexivity
. symmetry
. transitivity
)
Run Code Online (Sandbox Code Playgroud)
请注意,我们可以从这里抽象到:
findFixedPoint :: (a -> a) -> a -> a
findFixedPoint f = fst . List.head
. List.dropWhile (uncurry (/=)) -- dropWhile we have not reached the fixed point
. …
Run Code Online (Sandbox Code Playgroud) 我刚刚阅读了https://www.fpcomplete.com/user/tel/lens-aeson-traversals-prisms上的教程,我已经成功地将查询写入了json字节串.但是,我没有得到我想要的那种结果值.
我想做点什么
if (j^? key "some key" == Just "Google") then ...
else ...
Run Code Online (Sandbox Code Playgroud)
但是(j ^?key"某些键")的类型为"Maybe Value".
这必须是一个足够普遍的模式,如果没有实用程序函数将值转换为文本,我会感到惊讶.有任何想法吗?
我有一个定义相互递归表的模型:
Answer
questionId QuestionId
text
Question
text
correct AnswerId
Run Code Online (Sandbox Code Playgroud)
实际插入问题需要做什么?我需要先知道正确答案是什么.但要插入答案,我需要知道它回答了什么问题.
如果重要的话,我正在运行Postgres.
DDL是:
CREATE TABLE answer (
id integer NOT NULL, -- answer id
text character varying NOT NULL, -- answer text
question_id bigint NOT NULL -- question id
);
CREATE TABLE question (
id integer NOT NULL, -- question id
question character varying NOT NULL, -- question text
correct bigint NOT NULL, -- correct answer
solution character varying NOT NULL -- solution text
);
ALTER TABLE ONLY answer ALTER COLUMN …
Run Code Online (Sandbox Code Playgroud) sql postgresql database-design referential-integrity foreign-keys
我正在尝试为 Data.Time.Calendar 的 Day 类型创建一个 FromJSON 实例。我对这些类型感到困惑,这似乎是一种很常见的情况,应该得到解决。
因此 Day 类型代表修改后的儒略日期。Data.Time.Calendar 模块定义了“showGregorian”,它将修改后的儒略日期转换为公历日期并输出字符串 ISO 8601 表示形式。
问题在于 Data.Time.Calendar 没有很好的方法将 ISO 8601 解析为公历日期。如果我使用 ParseTime 类,则只能传入字符串格式,而不能传入字符串表示日期的日历。因此,实际上,我会传入“20140502”,并且 ParseTime 类会将该字符串视为修改后的儒略日期的字符串表示形式。
看来这应该是一个解决问题了。理想情况下,我想要一个不使用日期时间的解决方案。我的模型使用公历日期,因为这就是我所需要的,这些是我将要比较、搜索等的内容。
当然,当我只需要日历日时使用日历日的全部原因是这样我就不必考虑如何比较和转换它们,但我认为这是另一天的抱怨。
附录:
天数定义为:
-- | The Modified Julian Day is a standard count of days, with zero being the day 1858-11-17.
newtype Day = ModifiedJulianDay {toModifiedJulianDay :: Integer} deriving (Eq,Ord)
Run Code Online (Sandbox Code Playgroud)
这让我相信一天不是物理上的一天,而是 MJD 日历中的一天(原则上公开的文档应该告诉我们类型代表什么,而不是类型的表示)。
我正在尝试使用 Vim 来定位和复制/粘贴一些我需要分析和做笔记的代码。我在 Windows WSL 环境中使用 Debian。这就是为什么这很棘手。
常规的“yank and put to global register”命令"+y
和"*y
命令不起作用。
另一方面,我只使用鼠标抓取终端文本的蛮力方法也不起作用。奇怪的是,WSL 终端有鼠标支持,而且 Vim 可以跟踪它的运动,在可视模式下选择等等。所以 Vim 拦截了选择命令,然后 ctrl-shift-c 没有选择任何东西复制到 Windows 剪贴板中。
我知道 WSL 终端支持复制和粘贴,如果cat
我将文件复制到屏幕上,并使用 ctrl-shift-c 和 ctrl-v复制和粘贴,我可以成功地做到这一点。但后来我失去了导航的便利性。
将文本从 WSL 终端内的 Vim 复制到 Windows 剪贴板中的最佳方法是什么?
我正在为一个简单的"动态类型"语言编写AST库.我编写了语法树和解析器.现在我正在努力操纵AST,我有兴趣为此目的使用镜头包.
考虑
data Obj = Obj !(Map Text Obj)
| Arr ![Obj]
Run Code Online (Sandbox Code Playgroud)
我可以写一个镜头来很容易地操作对象字段:
field t (Obj m) = m^.at t
field _ _ = Nothing
Run Code Online (Sandbox Code Playgroud)
但我不知道从哪里开始操纵Arr元素.我想要一个镜头:
arrIx :: Int -> Obj -> Maybe Obj
arrIx i (Arr objs) = objs^.someLensHere i
where someLensHere i = undefined
Run Code Online (Sandbox Code Playgroud)
我会为了方便而改变我的Obj表示,但知道如何使用镜头对列表进行索引仍然会有所帮助.
我有一个深度嵌套的数据结构,我正在使用Control.Lens.*来简化在状态monad中访问它的值.
请考虑以下事项:
data Config = Config { _foo :: Maybe Int
, _bar :: Int
}
$(makeLenses ''Config)
Run Code Online (Sandbox Code Playgroud)
如何在"可爱"上"操作"地操作?我想写一个惯用的吸气剂:
config = Config (Just 1) 0
config^.foo.to fmap (+1) == Just 2
Run Code Online (Sandbox Code Playgroud)
更好的是,当Config嵌套得更深时,我们将如何处理这种情况?
data Config = { _foo :: Maybe Foo }
data Foo = Foo { _bar :: Bar }
data Bar = Bar Int
$(makeLenses ''Bar)
$(makeLenses ''Foo)
Run Code Online (Sandbox Code Playgroud)
我们可以使用访问器foo和bar来返回修改后的Bar吗?
我对Yesod的CSRF保护以及Yesod的表格如何运作感到困惑.我的理解是,Yesod的表单系统使用"令牌",它作为隐藏字段传递给表单的HTML实现.处理表单时,将令牌与服务器上存储的(或至少重新创建的)令牌进行比较.我想追踪这一点,因为我的开发环境中虚假地触发了CSRF保护,并且我想改变我的环境,以便表单在开发和生产中的工作方式相同.
那么Yesod的CSRF令牌"依赖于什么"?
我试图在Bash中编写一个简单的实用程序函数,它将在给定目录中执行"操作".所以我基本上抽象了"去目录,做某事,然后回来"的模式.
inDir() {
if [$# -le 1]; then
return;
else
local dir="$1";
local action="$2";
local cwd=`pwd`;
if [ -d "$dir" ]; then
cd "$dir";
$action;
cd "$cwd";
else
return;
fi
fi
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我运行它时,我得到了我认为是一个虚假的错误,我不知道它来自哪里.例如:
$ inDir "/tmp" "touch hi"
Run Code Online (Sandbox Code Playgroud)
正确创建文件/ tmp/hi,但也给出错误:
[2: command not found
Run Code Online (Sandbox Code Playgroud)
我不确定这对于阅读错误是否重要,但我的提示以"["开头.
有帮助吗?
haskell ×7
haskell-lens ×3
aeson ×2
list ×2
sql ×2
bash ×1
calendar ×1
clipboard ×1
csrf ×1
date ×1
esqueleto ×1
foreign-keys ×1
javascript ×1
knockout.js ×1
lenses ×1
letrec ×1
postgresql ×1
salt-stack ×1
vim ×1
windows-subsystem-for-linux ×1
y-combinator ×1
yesod ×1