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

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top