2016-05-01 6 views
2

Disclaimer: Ich bin neu bei Purescript und habe noch nicht das erstaunliche, aber etwas überwältigende Typsystem gefunden.Idiomatische Art, konstante Funktionen zu definieren

Angenommen, ich möchte eine Funktion, die ihr Argument ignoriert und immer den gleichen Wert zurückgibt. dies manuell als anonyme Funktion zu definieren, ist das kein Problem:

(\_ -> 42) <$> [true, false] 
-- => [42, 42] 

Aber ich fragte mich, ob es eine mehr idiomatische (und prägnant) Art und Weise, dies zu tun. Data.Const könnte beteiligt sein, aber ich muss noch herausfinden, wie man es dafür verwendet. So etwas wie (getConst 42) <$> [true, false] funktioniert nicht.

bearbeitet: diese selbst definieren:

makeConst :: forall a b. a -> (b -> a) 
makeConst x = (\_ -> x) 

(makeConst 42) <$> [true, false] 
-- => [42, 42] 

Dies funktioniert gut, aber ich würde so nicht überrascht, wenn etwas in der Standardmodulen besteht, und ich habe es einfach nicht sehen ...

+1

Ich glaube, Sie die konstante Funktion wollen: '(const 42) <$> [true, false]' – Lee

+0

Yup, das ist es. Ich denke, ich hätte die Prelude-Funktionen lesen sollen, bevor ich das hier poste. Denk daran, dies zu einer Antwort zu machen, damit ich es akzeptieren kann? –

+2

FYI in Ihrem speziellen Beispiel von 'const 42 <$> [wahr, falsch]' gibt es die '<$' and '$> 'Kombinatoren von' Data.Functor' in Purescript-Steuerelement. Als solche verwendet: '42 <$ [true, false]' und '[true, false] $> 42'. Referenz: https://pursuit.purescript.org/packages/purescript-control/0.3.2/docs/Data.Functor#v:(<$) – LiamGoodacre

Antwort

3

Sie wollen die const Funktion

const :: forall a b. a -> b -> a 

, die Sie Ihre Funktion erstellen können:

(const 42) <$> [true, false] 
Verwandte Themen