每个人。 我想在Purescript中的一系列记录中找到一个元素,但是由于我不熟悉Purescripot,因此无法解决。
我有一个数组banks
,其中包含银行记录。
这是银行记录的类型。
type Bank = {
id :: Int,
name :: String
}
我想在banks
中找到一家银行,其ID与给定的搜索ID相同。
我尝试如下:
find (_.id == searchId) banks
但出现此错误。
Could not match type
Int
with type
Function
{ id :: t0
| t1
}
请帮助我解决这个简单的问题。
答案 0 :(得分:4)
表达式import Alerts from '../layout/Alerts';
import AlertContext from '../../context/alert/alertContext';
const AddReviewModal = () => {
const alertContext = useContext(AlertContext);
const { setAlert } = alertContext;
const [text, setText] = useState('');
const [rating, setRating] = useState(0);
const onSubmit = () => {
if (text === '') {
setAlert('Review text cannot be empty', 'danger');
} else if (rating === 0) {
setAlert('Please select a rating for your review', 'danger');
} else {
console.log({ text, rating });
setText('');
setRating(0);
}
};
return (
<div id="add-review-modal" className="modal">
<div className="modal-content">
<h4>Add a review</h4>
<Alerts />
<div className="row">
<p>
<label>
<input
name="group1"
type="radio"
value={5}
checked={rating === 5}
onChange={() => setRating(5)}
/>
<span>
<span className="fas fa-star" />
<span className="fas fa-star" />
<span className="fas fa-star" />
<span className="fas fa-star" />
<span className="fas fa-star" />
</span>
</label>
</p>
<p>
<label>
<input
name="group1"
type="radio"
value={4}
checked={rating === 4}
onChange={() => setRating(4)}
/>
<span>
<span className="fas fa-star" />
<span className="fas fa-star" />
<span className="fas fa-star" />
<span className="fas fa-star" />
<span className="far fa-star" />
</span>
</label>
</p>
<p>
<label>
<input
name="group1"
type="radio"
value={3}
checked={rating === 3}
onChange={() => setRating(3)}
/>
<span>
<span className="fas fa-star" />
<span className="fas fa-star" />
<span className="fas fa-star" />
<span className="far fa-star" />
<span className="far fa-star" />
</span>
</label>
</p>
<p>
<label>
<input
name="group1"
type="radio"
value={2}
checked={rating === 2}
onChange={() => setRating(2)}
/>
<span>
<span className="fas fa-star" />
<span className="fas fa-star" />
<span className="far fa-star" />
<span className="far fa-star" />
<span className="far fa-star" />
</span>
</label>
</p>
<p>
<label>
<input
name="group1"
type="radio"
value={1}
checked={rating === 1}
onChange={() => setRating(1)}
/>
<span>
<span className="fas fa-star" />
<span className="far fa-star" />
<span className="far fa-star" />
<span className="far fa-star" />
<span className="far fa-star" />
</span>
</label>
</p>
<div className="input-field">
<input
type="text"
name="text"
value={text}
onChange={e => setText(e.target.value)}
/>
<label htmlFor="name" className="active">
Comment about your choice of rating
</label>
</div>
</div>
<div className="modal-footer">
<a
className="waves-effect waves-light btn-large"
href="#!"
onClick={onSubmit}
>
Enter
</a>
</div>
</div>
</div>
);
};
export default AddReviewModal;
是一个接受_.id
并返回其Bank
的函数(有点过分简化,但到目前为止已经足够了)。
说明:
id
然后使用该函数,并尝试将其与getId = _.id
bank = { id: 42, name: "my bank" }
getId bank == 42
(我假设它是一个数字)进行比较。
好吧,您不能将函数与数字进行比较,这就是编译器告诉您的:“ 无法将Int类型与Function类型匹配”
函数searchId
希望获得一个接受find
并返回Bank
的函数作为其第一个参数。产生这种功能的方法有很多,但是最明显的是使用lambda抽象:
Boolean
因此,将其插入您的代码中
\bank -> bank.id == searchId
答案 1 :(得分:1)
您可以像这样更改代码。
find(\{id} -> id == searchId) banks
因此您可以获得结果对象。