Cómo aplicar dos funciones en la misma cadena sin usar ">>"
Pregunta
Estoy escribiendo una función como esta.
func :: IO()
func = putStr print "func = putStr print"
Sé que es incorrecto, pero la idea es que quiero el putStr
aplicado en la cadena entonces print
aplicado en la misma cadena "fun = .."
para que la salida sea:
func = putStr print "func = putStr print"
que es lo mismo que mi definición de función. Gracias
Solución
Está bien tener un campo estático en un tipo genérico, siempre que sepa que realmente obtendrá un campo por combinación de argumentos de tipo.Mi conjetura es que R # es solo advirtiéndote en caso de que no fuera consciente de eso.
Aquí hay un ejemplo de eso:
using System;
public class Generic<T>
{
// Of course we wouldn't normally have public fields, but...
public static int Foo;
}
public class Test
{
public static void Main()
{
Generic<string>.Foo = 20;
Generic<object>.Foo = 10;
Console.WriteLine(Generic<string>.Foo); // 20
}
}
Como puede ver, Generic<string>.Foo
es un campo diferente desde Generic<object>.Foo
, tienen valores separados.
Otros consejos
No estoy seguro de a dónde vas con el "sin usar >>
"Parte (si ese es realmente el uso de puntos do
-notación), pero puede escribir fácilmente una función de ayuda que aplique dos funciones en secuencia a la misma entrada:
tee f g s = f s >> g s
func = tee putStr print "..."
Además, para evitar repetir la cadena, una variable local con let
o where
Probablemente sería el más fácil:
let s = "..."
in putStr s >> print s
Podrías hacerlo así:
doActions str actions = mapM_ ($ str) actions