czy istnieje możliwość stworzenia FMap dla zapisów tak, że można zastosować tę samą funkcję rejestrowania pól podobna bur różnych typówJak zdefiniować FMap na strukturze rekordu z F #
powiedzmy mam rekord typ pola Item
i zapis X
i funkcja transform
type Item<'a, 'b> = Item of 'a * 'b
let transform (i: Item<'a, 'b>) : Item<'a, string> =
let (Item (x, y)) = i
Item (x, sprintf "%A" y)
type X<'a> = {
y: Item<'a, int>
z: Item<'a, bool>
}
with
member inline this.fmap(f) =
{
y = f this.y
z = f this.z
}
teraz linia z = f this.z
skarży się, że dany typ powinien być Item<'a, int>
ale jego typu Item<'a, bool>
. Oczywiście, gdy inwertor typu
zdecydował, że funkcja f
jest typu Item<'a, int> -> Item<...>
, ale chcę, aby f
był polimorficzny. Jak mogę to zrobić?
Hacki typu zła są mile widziane!
Funkcja genericity działa tylko w definicji. Gubi się, gdy stajesz się "wartością" i zaczynasz ją omijać. Jeśli chcesz zachować ogólność, użyj interfejsu. –
Więc f powinna być dowolną funkcją "a ->" a gdzie "może być ciągiem znaków lub boolem? Nie ma wielu funkcji, które mógłbym myśleć poza '' id''. – Gustavo