F # - Извлечь параметр из Expr - PullRequest
0 голосов
/ 22 апреля 2011

Мои вопросы не прекратятся ...

У меня есть функция:

let hasMany (expr:Expr<'a -> seq<'b>>)

Теперь я хочу извлечь seq<'b> из Expr, так как мне нужнобросить его на ICollection<'b> и обернуть его обратно в новый Expr - Почему бы просто не заставить его взять Expr, который занимает ICollection<'b> в первом месте, которое вы можете спросить - достаточно просто, чтобы пользователю понадобилосьсначала приведите seq<'b> к ICollection<'b>, чего я стараюсь избегать, поскольку я создаю библиотеку, которая будет использоваться другими, кроме меня, и я хочу, чтобы она была простой и чистой.

Short: Как извлечь seq<'b> из Expr?

1 Ответ

3 голосов
/ 23 апреля 2011

Ваш вопрос не имеет смысла для меня. С учетом ваших типов seq<'b> в expr - expr не является выражением, охватывающим функцию , которую возвращает a seq<'b>. Например, с подписью, которую вы получили, было бы правильно позвонить

hasMany <@ id @>

, поскольку id может быть присвоен тип 'b seq -> 'b seq. Однако ясно, что <@ id @> не содержит seq<'b>!

Если вы хотите преобразовать Expr<'a -> seq<'b>> в Expr<'a -> ICollection<'b>>, попробуйте следующее:

let hasMany (expr : Expr<'a -> 'b seq>) =
    <@ fun x -> (%expr) x :?> ICollection<'b> @>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...