数据QueryParam(sym :: Symbol)a - 这是什么意思?

时间:2016-04-13 02:53:32

标签: haskell

我在Haskell代码中看到了这一点:

data QueryParam (sym :: Symbol) a

这是什么意思?构造函数在哪里?这是没有任何扩展名的有效代码吗?

1 个答案:

答案 0 :(得分:3)

是的,这是一个没有构造函数的数据声明 - 这样的声明表明// DocumentDB query // POINT TO PONDER: create the formatted query, so that after creating the dynamic query we'll replace it with dynamically created "SQL Parameter/s" var queryText = @"SELECT us.id, us.email, us.status, us.role FROM user us WHERE us.status = @userStatus AND us.email IN ({0})"; // contain's list of emails IList<string> emailIds = new List<string>(); emailIds.Add("a@gmail.com"); emailIds.Add("b@gmail.com"); #region Prepare the query // simple parameter: e.g. check the user status var userStatus = "active"; var sqlParameterCollection = new SqlParameterCollection { new SqlParameter("@userStatus", userStatus) }; // IN clause: with list of parameters: // first: use a list (or array) of string, to keep the names of parameter // second: loop through the list of input parameters () var namedParameters = new List<string>(); var loopIndex = 0; foreach (var email in emailIds) { var paramName = "@namedParam_" + loopIndex; namedParameters.Add(paramName); var newSqlParamter = new SqlParameter(paramName, email); sqlParameterCollection.Add(newSqlParamter); loopIndex++; } // now format the query, pass the list of parameter into that if (namedParameters.Count > 0) queryText = string.Format(queryText, string.Join(" , ", namedParameters)); // after this step your query is something like this // SELECT // us.id, // us.email, // us.status, // us.role // FROM user us // WHERE us.status = @userStatus AND us.email IN (@namedParam_0, @namedParam_1, @namedParam_2) #endregion //Prepare the query // now inject the parameter collection object & query var users = Client.CreateDocumentQuery<Users>(CollectionUri, new SqlQuerySpec { QueryText = queryText, Parameters = sqlParameterCollection }).ToList(); 类型的类型为QueryParam

它与在类型级别有效的信息一起使用 - 它与Symbol相当,但在类型级别而不是值级别。