我正在尝试以这种格式打印出一个整数列表
[1]
[2]
[3]
Run Code Online (Sandbox Code Playgroud)
所以我的函数获取一个整数列表并返回一个IO(),如下所示:
import System.IO
printVector :: [Integer] -> IO ()
printVector (x:xs) = putStr("[" ++ show(x) ++ "]" ++ "\n") : printVector xs
Run Code Online (Sandbox Code Playgroud)
但是ghc给了我错误:
lin-test.hs:5:22:
Couldn't match expected type `IO ()' with actual type `[a0]'
In the expression:
  putStr ("[" ++ show (x) ++ "]" ++ "") : printVector xs
In an equation for `printVector':
    printVector (x : xs)
      = putStr ("[" ++ show (x) ++ "]" ++ "") : printVector xs
Failed, modules loaded: none.
Run Code Online (Sandbox Code Playgroud)
现在我的理解是函数将遍历列表,首先是第一个项'x',然后是:printVector …
我在理解Haskell中的符号时遇到问题:
=<<
Run Code Online (Sandbox Code Playgroud)
如:
-- return the last ten lines of a file
tail10  = drop =<< subtract 10 . length
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我解释这意味着什么?
此外,我发现当我正在研究Haskell时,这种情况很多,我碰到其中一个符号,我不知道它们是什么意思或它们是如何工作的.是否有一个网站或教程更深入地涉及Haskell中的符号而不是函数本身?
我想知道是否有可能在Haskell中以某个名字结束记录的所有字段.例如
data Record = Record {
    field       :: String
    field2_ids  :: Maybe [Int]
    field3_ids  :: Maybe [Int]
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我想得到一个以"ids"结尾的字段列表.我不知道他们的名字.我只知道它们以"ids"结尾我需要的是字段名称和它包含的值.所以我想这将是一张地图列表
[{field2_ids = Maybe [Int]}, {fields3_ids = Maybe [Int]}...]
Run Code Online (Sandbox Code Playgroud)
甚至是一个元组列表
[("field2_ids", Maybe [Int])...]
Run Code Online (Sandbox Code Playgroud)
顺便说一句,在我的情况下,我正在提取的字段将始终具有类型Maybe [Int].
这可能吗?我怀疑它不是可能与香草唱片语法,但这可能是镜头可以实现的吗?
UPDATE
我理解我的问题是在我实际上要做的事情上引起一些混乱.所以我会解释一下
我正在使用服务的微服务模式.每个服务都绑定到单个数据模型.例如,博客服务将包含单个博客模型.但博客服务可以有各种关系.例如,它可以与类别服务有关系.它还可以与标签服务有关.因为有可能与另一个服务有多个关系,所以我有一个类型,Maybe [Int]因为我可以发布一个博客,Just [Int]或者Nothing根本没有关系.每个服务通过在Relation表中注册它们来处理它们的关系.
因此,要创建一个新的Blog Post,我需要一个像Servant这样的数据结构
data BlogPostRequest = BlogPostRequest {
    title :: String,
    published :: DateTime,
    public :: Bool,
    category_ids :: Maybe [Int],
    tag_ids :: Maybe [Int]
}
Run Code Online (Sandbox Code Playgroud)
端点将获取与Blog模型相关的所有字段,并将其存储为新的Blog实例.然后,它将获取所有关系(如果存在于category_ids和tag_ids中)并将其存储在Relation表中.
我唯一担心的是,使用传统的记录语法是,如果我有多个关系,代码将变得非常臃肿.服务从配置文件生成.所以是的,我确实从开始就知道了所有字段的名称.对不起我之前对此的陈述非常混乱.我的观点是,如果我能够通过知道他们的名字以_ids结尾来将记录从记录中拉出来,我可以减少很多代码.
这将是vanilla记录语法方法.想象一下,storeRelation是一种采用a String和a Maybe [Int]并相应地处理存储关系的方法 …
前几天我被告知我不应该在c中以某种方式使用指针箭头.我做的是这样的:
struct info {
    int x;
    char *data;
}
int main() {
    struct info *information;
    information -> x = 0; /*Notice the spacing here between information and -> x*/
    information -> data = "";
}
Run Code Online (Sandbox Code Playgroud)
我经常看到的
struct info *information;
information->x = 0;
Run Code Online (Sandbox Code Playgroud)
我只是想问一下,这只是一个常规的编码标准吗?我觉得 - >比p->东西更清洁.